Rubymethoden kann während des Aufrufs optional ein Block mitgegeben werden. Dieser Block kann optional als Proc-Objekt unter Verwendung des Präfixes & mit dem letzten Parameter übergeben werden, bleibt aber mittels des Schlüsselwortes "yield" immer aufrufbar.
Das Schlüsselwort "yield" wirkt syntaktisch wie ein Methodenaurfur auf dem aktuellen Objekt. Wie ein Methodenaufruf kann es eine Liste von Parametern haben und liefert am Ende ein Ergebnis zurück.
yield(1, 2) yield 3 x = yield(4)
Selbst wenn das Blockargument in einer Methode benannt wird, kann der Block über "yield" immer noch vom Code aufgerufen werden. Das erspart den Aufruf des Proc-Objektes.
def both_ways(&block) block.call(1) yield(1) end
Diese beiden Formen sind nicht identisch. Zum Beispiel beeinflusst die Neudefinition von Proc#call zwar den ersten, aber nicht den zweiten Aufruf.
Blöcke können innerhalb einer Methode als Proc-Objekte benannt und erfasst werden. Proc-Objekte können aber auch in den Block während des Methodenaufrufs mit Hifle des Präfixes & am letzten Argument eingefügt werden.
def only_uses_yield
yield
end
a_proc = proc{ puts "called" }
only_uses_yield(&a_proc)