2
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 程序员出于某种原因认为这是一个坏主意。我的问题是是什么阻止我这样做?

4

1 回答 1

2

This is consistent with how UnboundMethods normally work. The object you bind them to has to be a kind_of? the class the method came from. another_string is not descended from some_string's singleton class (just like no other object is), so you can't bind the the methods of some_string's singleton class to it.

于 2014-06-13T21:17:38.400 回答