2011年4月21日

[ruby-list:47990] String#gsub への委譲

5.5 です。

受け取った引数とブロックを String#gsub へ丸投げするようなメソッドを
考えてみたのですが,うまくいきませんでした。

class S
def initialize(str)
@str=str

end
def gsub(re, &block)
@str.gsub(re, &block)
end
end

p S.new("a1a").gsub(/\d/){"<#{$&}>"} # => "a<>a"

調べたところ,与えたブロックの中では Regexp.last_match が nil
でした。

Fowardable や SimpleDelegator を使ってみたりもしたのですが,同じ結
果です。

ブロックのスコープに関する理解が欠けているために解決できないのかな
と思うのですが,どのようにすればいいのでしょうか?

リファレンスマニュアルの String#gsub や $1 などを見ましたが分かり
ませんでした。

--
5.5@xxxxx


投稿者 xml-rpc : 2011年4月21日 09:10
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/103204
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。