Вы не понимаете, как работает UnboundMethod#bind
. Вы вызываете Module#instance_method
, чтобы получить UnboundMethod
(то есть метод без self
):
OriginalFoo.instance_method(:bar)
# #<UnboundMethod: ... >
Затем вы вызываете UnboundMethod#bind
, чтобы присоединить self
к этому методу, который возвращает a Method
экземпляр:
m = OriginalFoo.instance_method(:bar).bind(foo_instance)
# => #<Method: ...>
Но это не изменит метод в foo_instance
, все, что он делает, это делает self
вашим foo_instance
, когда (или если) вы сказали m.call
: um.bind(obj)
ничего не делает для obj
, это просто дает вам um
как Method
, который имеет obj
в качестве self
.