Übergeben von Argumenten an gängige Iterations-Escape-Methoden zur besseren Kontrolle in Enumerables.
Ruby bietet zwei Möglichkeiten, einer Enumerable zu entkommen: next
tritt ohne weitere Auswertung in die nächste Iteration ein, und break
verlässt die Enumerable vollständig.
Werfen wir einen kurzen Blick auf beide mit einigen einfachen Beispielen.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
Im obigen Beispiel sehen wir, dass 1
nicht auf der Konsole gedruckt wird, da der Aufruf von next
bei der ersten Iteration ausgelöst wird (1 ist kleiner als 2), wobei die Anweisung puts
übersprungen wird. Die Bedingung wird in den folgenden zwei Iterationen nicht erfüllt, und die Anweisung puts
gibt erwartungsgemäß num
an die Konsole aus, gefolgt von einer Rückgabe von a
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
Mit break
ist etwas ganz anderes passiert. Hier wird bei der ersten Iteration 1 erneut als kleiner als 2 ausgewertet, und daher wird unser Aufruf von break
ausgeführt, wobei die Aufzählung vollständig verbleibt. In diesem Fall sehen wir, dass zukünftige Iterationen nicht stattfinden und nil
zurückgegeben wird.
Obwohl dieses Escape wünschenswert ist, was wäre, wenn wir etwas anderes als nil
zurückgeben müssten? Glücklicherweise akzeptieren sowohl break
als auch next
ein Argument, um einen Rückgabewert manuell festzulegen.
Argumente übergeben
Schauen wir uns zunächst an, wie es mit break
funktioniert:
a = a.each do |num|
break num if num < 2
puts num
end# console output
=> 1
Hier haben wir num
als Argument an break
(denken Sie daran, dass Klammern in Ruby optional sind, daher werden break num
und break(num)
identisch ausgewertet) und den Rückgabewert manuell angegeben. Wenn Sie jemals etwas anderes als nil
wenn break
ausgelöst wird, kann dies außerordentlich nützlich sein.