有没有办法从Ruby中的方法中获取真正的proc
?
通过UnboundMethod
获得的instance_method
不适合该法案,因为我只能将其绑定到声明该方法的类的对象。我无法在self
中使用proc
(instance_exec
)重新解释方法体内的Method
。
同样,通过method
获得的self
也不行,因为method
绑定到self
的接收者,我无法更改它。
编辑(澄清):
我要做的是采用一个类中定义的方法并将其传递给另一个类。这意味着我需要能够重新解释方法中proc
的含义。对于instance_exec
,这可以通过instance_eval
和{{1}}进行,但不适用于方法。
为什么我要尝试将方法从一个类移到另一个类?简而言之,实现一种命名空间形式,因为我对Ruby提供的可见性控制最不满意(没有办法将模块成员隐藏到包含类)。然而,这远远超出了这个问题的范围。
答案 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
从第一个对象转换为源,然后在第二个对象的上下文中对其进行评估