class UnboundMethod

Ruby unterstützt zwei Formen von objektifizierten Methoden. Die Klasse Method wird verwendet, um Methoden darzustellen, die mit einem bestimmten Objekt verknüpft sind: Diese Methodenobjekte sind an dieses Objekt gebunden. Gebundene Methodenobjekte für ein Objekt können mit Object#method erstellt werden.

Ruby unterstützt auch ungebundene Methoden; Methodenobjekte, die nicht mit einem bestimmten Objekt verknüpft sind. Diese können entweder durch Aufruf von Module#instance_method oder durch Aufruf von unbind auf einem gebundenen Methodenobjekt erstellt werden. Das Ergebnis beider Aktionen ist ein UnboundMethod-Objekt.

Ungebundene Methoden können nur aufgerufen werden, nachdem sie an ein Objekt gebunden wurden. Dieses Objekt muss eine Art von kind_of? der ursprünglichen Klasse der Methode sein.

class Square
  def area
    @side * @side
  end
  def initialize(side)
    @side = side
  end
end

area_un = Square.instance_method(:area)

s = Square.new(12)
area = area_un.bind(s)
area.call   #=> 144

Ungebundene Methoden sind ein Verweis auf die Methode zum Zeitpunkt ihrer Objektifizierung: Nachfolgende Änderungen an der zugrunde liegenden Klasse wirken sich nicht auf die ungebundene Methode aus.

class Test
  def test
    :original
  end
end
um = Test.instance_method(:test)
class Test
  def test
    :modified
  end
end
t = Test.new
t.test            #=> :modified
um.bind(t).call   #=> :original