来自方法的真实过程

时间:2012-09-07 10:40:43

标签: ruby metaprogramming

有没有办法从Ruby中的方法中获取真正的proc

通过UnboundMethod获得的instance_method不适合该法案,因为我只能将其绑定到声明该方法的类的对象。我无法在self中使用procinstance_exec)重新解释方法体内的Method

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

编辑(澄清):

我要做的是采用一个类中定义的方法并将其传递给另一个类。这意味着我需要能够重新解释方法中proc的含义。对于instance_exec,这可以通过instance_eval和{{1}}进行,但不适用于方法。

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

1 个答案:

答案 0 :(得分:4)

来自to_proc的{​​{1}}可以帮助您:

Method

更新:只是一个想法

使用sourcify gem将class A def test puts 'this is a test' end end m = A.new.method(:test) m.to_proc.call #=> this is a test 从第一个对象转换为源,然后在第二个对象的上下文中对其进行评估