From: Kazuhiro NISHIYAMA Date: 2018-10-10T23:55:56+09:00 Subject: [ruby-list:50708] Re: [Q]last_matchをブロックに渡す方法 西山和広です。 On Tue, 09 Oct 2018 19:21:33 +0900, Masa Sakano wrote: > > Rubyのメソッドから、ブロックに $1, $2 (を含めた Regexp.last_match) を > 渡す方法がないものか、と質問します。 local_variable_set(:$~, $~) ができないようなので、 一旦適当なローカル変数 (名前が衝突する可能性がある) に 入れて eval で代入する方法しか思いつきませんでしたが、 できないことはないようです。 def f(&block) /a/ =~ "a" block.binding.tap do |b| b.local_variable_set(:_md, $~) b.eval("$~=_md") end yield end f{p $&} #=> "a" -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)