[ruby-list:50708] Re: [Q]last_matchをブロックに渡す方法
From:
Kazuhiro NISHIYAMA <zn@...>
Date:
2018-10-10 14:55:56 UTC
List:
ruby-list #50708
西山和広です。
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)