[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)

In This Thread