ruby – 使用Proc#调用时为self提供值

当使用Proc#调用在Ruby中调用一个lambda函数时,自己总是得到定义函数时的值,而不是调用该函数时具有的值,例如:

$p = lambda { self }

class Dummy
  def test
    $p.call
  end
end

d = Dummy.new

> d.test
=> main

调用测试返回main,当我打算返回的是#< Dummy:0xf794> – 一个Dummy的例子,这是代码中我所说的$ p的点的自我价值。

在Javascript中,我只是传递我想要作为第一个被调用参数的“被调用者”对象。在Ruby中有没有这样的功能,允许我设置一个任意对象,或者至少将当前的self值作为自我的新值,当我调用一个Proc?

你正在寻找一个instance_eval,它在调用对象的上下文中对lambda进行评估。

>> $p = proc { self }
=> #<Proc:0x95cece4@(irb):1 (lambda)>
>> class Dummy
>>   def test
>>     $p.call
>>   end
>> 
>>   def test1
>>     instance_eval(&$p)
>>   end
>> end

>> d = Dummy.new
=> #<Dummy:0x946f7c8>
>> d.test
=> main
>> d.test1
=> #<Dummy:0x946f7c8>
翻译自:https://stackoverflow.com/questions/1728900/provide-value-for-self-when-using-proccall

转载注明原文:ruby – 使用Proc#调用时为self提供值