【发布时间】:2012-11-05 14:37:46
【问题描述】:
我想知道我是否可以强迫这种情况发生
class A
def bomb ; "bomb" ; end
end
class B ; end
bomb = A.instance_method(:bomb)
b = B.new
bomb.bind(b)
目前它抛出错误 TypeError: bind argument must be an instance of A
我发现这对于我可以用这些未绑定的方法做什么非常有限,可能性有点限制。在这样的情况下(而且我不仅仅指幂等函数),它会有意义吗?并且执行错误就足够了,如果我要处理 A 中未在 B 中复制的变量。我真的很想知道如何强制这种绑定。
【问题讨论】:
-
一些有趣的事情是可能的:
Object.instance_method(:to_s).bind("hello world").call #=> "#<String:0x0000000195e1f0>"。不过,我认为不可能在您的示例中强制绑定。 -
是的,那是因为String继承自Object,你可以将超类实例方法绑定到它的子类实例。一个例子:A类;定义吨; “一个” ;结尾 ;结尾 ; B类
-
如果
A本来是module,那么在 ruby 2 中是可能的
标签: ruby instance-methods