Method#unbind
restituisce un riferimento UnboundMethod
al metodo, che può essere successivamente associato a un altro oggetto utilizzando UnboundMethod#bind
.Qual è il punto del meccanismo di unbinding del metodo di Ruby?
class Foo
attr_reader :baz
def initialize(baz)
@baz = baz
end
end
class Bar
def initialize(baz)
@baz = baz
end
end
f = Foo.new(:test1)
g = Foo.new(:test2)
h = Bar.new(:test3)
f.method(:baz).unbind.bind(g).call # => :test2
f.method(:baz).unbind.bind(h).call # => TypeError: bind argument must be an instance of Foo
Inizialmente, ho pensato che questo è incredibilmente impressionante, perché mi aspettavo che avrebbe funzionato in modo simile a di Function.prototype.call()
/Function.prototype.apply()
JavaScript. Tuttavia, l'oggetto a cui si desidera associare il metodo deve essere della stessa classe.
L'unica applicazione che riesco a pensare è se si disimpegna un metodo, si perde l'implementazione originale (ridefinire il metodo nella classe originale o singleton) e quindi ricollegarlo e chiamarlo.
ho trovato una spiegazione ordinata qui - http://blog.jayfields.com/2006/12/ruby-alias-method-alternative.html –
@WandMaker, idea pulito. Cade nella categoria che ho descritto. Sarei sorpreso se questa fosse l'unica ragione per la sua esistenza. – ndn