some_string = "i love lamp"
another_string = "i love desk"
def some_string.lovehate
    if match /love/
        sub /love/, "hate"
    elsif match /hate/
        sub /hate/, "love"
    end
end

puts some_string.lovehate # => "i hate lamp"
puts another_string.respond_to? :lovehate # => false
m = some_string.method(:lovehate).unbind
m.bind(another_string).call # fails

失败的原因是
singleton method called for a different object (TypeError)

很明显,ruby程序员认为这是个坏主意是有原因的我的问题是什么阻止了我这么做?

最佳答案

这与unboundmethods的正常工作方式是一致的。你把它们绑在一起的对象一定是什么?方法来自的类。another_string不是some_string的singleton类的派生(就像没有其他对象一样),因此不能将some_string的singleton类的方法绑定到它。

07-24 17:05