From: Park Ji-In Date: 2008-01-27T14:16:52+09:00 Subject: [ruby-dev:33416] Re: wrapped String#gsub 朴 芝印です。 2008/1/26, KURODA Hiraku : > ブロックの中でブロックを実行するメソッドのマッチのデータを使いたい場合ですが、ブロックのパラメータ > に$&を渡すのはいかがでしょうか? > > ---- ソース > #!/usr/bin/ruby > class String > def wrap_gsub2(*a) > self.gsub(*a){yield($~) if block_given?} > end > end > > "abc,abc".wrap_gsub2(/(a)(bc)/) {|m| puts m[0], m[1], m[2] } 何かややこしく手を入らなければならないようですね。 それが出来る時はそれで良いと思いますが、 DelegateClassも同じ結果がでました。 require 'delegate' class Merong < DelegateClass(String) def initialize(str) @mystr = str super(@mystr) end end m = Merong.new('abc') s = m.gsub(/([abc]+)/) {$1.upcase} puts s 結果 (eval):3:in `__send__': undefined method `upcase' for nil:NilClass (NoMethodError) from (eval):3:in `gsub' from delegate_test.rb:11 これはバグだと認められるでしょうか。