为什么我不能将单例方法附加到另一个对象?

时间:2014-06-13 21:04:52

标签: ruby oop singleton singleton-methods

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)

很明显,红宝石程序员认为出于某种原因这是一个坏主意。我的问题是阻止我这样做的原因是什么?

1 个答案:

答案 0 :(得分:2)

这与UnboundMethods通常的工作方式一致。你绑定它们的对象必须是kind_of?方法来自的类。 another_string不属于some_string的单例类(就像其他对象一样),因此您无法绑定some_string&#39的方法; s单身课程。