2011年4月21日9:10 5.5 <5.5 / moji.gr.jp>: > 受け取った引数とブロックを 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 などを見ましたが分かり > ませんでした。 [ruby-dev:33403] での話ですかね。 ブロック引数で必ずしも回避できないのがアレなところ -- NARUSE, Yui <naruse / airemix.jp>