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>