2

proc有没有办法从 Ruby 中的方法中得到一个真实的?

获得的UnboundMethodviainstance_method不符合要求,因为我只能将它绑定到声明该方法的类的对象。我无法像在(使用)中那样重新解释self方法体内部。procinstance_exec

同样,Method获得的 viamethod也不行,因为self它绑定到了接收者,method我无法更改它。

编辑(澄清):

我要做的是采用一个类中定义的方法并将其转移到另一个类。这意味着我需要能够重新解释self方法内的含义。对于procs,这可以通过instance_execand实现instance_eval,但对于方法则不行。

为什么我试图将方法从一个类移动到另一个类?长话短说,实现一种命名空间形式,因为我对 Ruby 提供的可见性控制最不满意(无法将模块成员隐藏到包含类)。然而,这远远超出了这个问题的范围。

4

1 回答 1

4

也许to_procfromMethod可以帮助你:

class A
  def test
    puts 'this is a test'
  end
end

m = A.new.method(:test)

m.to_proc.call #=> this is a test

更新:只是一个想法

通过使用sourcify gemproc从第一个对象转换为源,然后在第二个对象的上下文中评估它

于 2012-09-07T11:19:01.147 回答