Method#unbind
gibt einen Verweis auf die Methode UnboundMethod
zurück, die später mithilfe von UnboundMethod#bind
an ein anderes Objekt gebunden werden kann.Was ist der Zweck von Rubys Methoden zum Auflösen von Methoden?
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
Anfangs dachte ich, das unglaublich genial, weil ich es erwartet hätte Function.prototype.call()
/Function.prototype.apply()
ähnlich wie JavaScript arbeiten. Das Objekt, an das Sie die Methode binden möchten, muss jedoch derselben Klasse angehören.
Die einzige Anwendung, die ich mir vorstellen kann, ist, wenn Sie eine Methode lösen, die ursprüngliche Implementierung verlieren (die Methode in der ursprünglichen oder Singleton-Klasse neu definieren) und dann erneut binden und aufrufen.
fand ich eine ordentliche Erklärung hier - http://blog.jayfields.com/2006/12/ruby-alias-method-alternative.html –
@WandMaker, nette Idee. Es fällt in die Kategorie, die ich beschrieben habe. Ich wäre überrascht, wenn dies der einzige Grund für seine Existenz wäre. – ndn