Ruby Unbound Methods:是否可以强制绑定到其他类的实例?

我想知道我是否可以强迫这种情况发生

class A def bomb ; "bomb" ; end end class B ; end bomb = A.instance_method(:bomb) b = B.new bomb.bind(b) 

目前它抛出错误TypeError:bind参数必须是A的实例

我发现这对于我可以用这些未绑定的方法做的非常有限,可能性有点限制。 在这些情况下(我不仅仅指幂等函数)它会有意义吗? 并且执行错误就足够了,如果我将处理A中未在B中复制的变量,我真的很想知道如何强制这个绑定。

你不能用另一个类的方法绑定一个类的实例。 除非实例是此类或其子类的对象。

这也是显而易见的,一个类的细节不能转移到其他类的实例。 它只能与被授权携带该信息的实例绑定,即该类或其子类的实例。

因此,ruby还通过不将特定类的方法绑定到另一个类的实例来维护封装。

Method和UnboundMethod类型期望绑定目标必须是引用该方法的原始类的子类。 将方法转换为proc会删除子类约束,但只有Method实现了to_proc方法。

 class A def bomb ; "bomb" ; end end class B ; end bomb = A.new.method(:bomb) B.send(:define_method, :bomb_in_b, &bomb) #converting to proc b = B.new puts b.bomb_in_b 

在Ruby 2.2.3中测试过