Zeile irgendein Argument zu Ihrer Methode der Name ist weitgehend subjektiv. Normalerweise wird &block
nur nach Konvention verwendet, aber der Name selbst kann beliebig sein, solange es sich um einen gültigen Variablennamen handelt.
In Ihrem Beispiel deklarieren Sie einen Blocknamen, verwenden den Namen aber nicht. Denken Sie daran, dass beliebig Ruby-Methode einen Block gegeben werden kann, gibt es keine Möglichkeit, dies zu beschränken, aber es ist an der Methode selbst, den Block zu verwenden, wenn es will. Dieser Block kann null oder mehrmals entweder sofort oder irgendwann in der Zukunft genannt werden. Geben Sie den Block der Methode, die Kontrolle übergibt, so achten Sie darauf, die Dokumentation zu jeder gegebenen Methode sorgfältig zu lesen. Es kann Überraschungen geben.
Wenn Sie an die Kette durch einen Block benötigen, erklären es mit einem Namen:
def passes_through(&block)
[ 1, 2, 3, 4 ].each(&block)
end
Wenn Sie yield
auf den Block gehen, gibt es keine Notwendigkeit hier:
def direct_call
[ 1, 2, 3, 4 ].each do |n|
yield n
end
end
Wenn Sie‘ re geht um den Anruf zu bewahren und es später verwenden, das ist auch ein Fall für die Namensgebung:
def preserved_call(&block)
@callback = block
end
def make_callback
@callback and @callback.call
end
Jeder m ethode kann überprüfen, ob ein Block geliefert wurde:
def tests_for_block
if (block_given?)
yield 'value'
else
'value'
end
end
Es gibt ein klein, aber messbar Kosten um einen Block zu erfassen, indem sie es in der Methodensignatur erklärt, eine Menge Berechnung getan werden muss, richtig die Variablen alle das könnte erfassen in einer Verschlusssituation verwendet werden. Im leistungssensitiven Code sollten Sie dies vermeiden.
Sie können dynamisch einen Block erstellen:
def captures_conditionally
if (block_given?)
@callback = Proc.new
end
end
Die Proc.new
Methode Kontrolle über nehmen wird, was auch immer Block dem Verfahren zugeführt worden ist, wenn man gewesen ist.
'method' ist ein reservierter Name, und das Definieren einer Methode mit diesem Namen kann problematisch sein. – tadman