przekazywanie argumentów do typowych metod ucieczki iteracji dla lepszej kontroli w enumerables.
Ruby zapewnia dwa sposoby ucieczki z enumerable:next
wprowadzi następną iterację bez dalszej oceny, abreak
całkowicie wyjdzie z enumerable.
rzućmy okiem na oba z prostymi przykładami.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
w powyższym przykładzie widzimy, że 1
nie jest drukowany do konsoli, ponieważ wywołanie next
uruchamia się podczas pierwszej iteracji (1 jest mniejsze niż 2), pomijając puts
oświadczenie. Warunek nie jest spełniony w dwóch kolejnych iteracjach, a polecenieputs
wysyłanum
do konsoli, zgodnie z oczekiwaniami, po czym następuje zwrota
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
zbreak
stało się coś zupełnie innego. Tutaj, w pierwszej iteracji, 1 Ponownie jest obliczane jako mniejsze niż 2, a więc nasze wywołanie do break
jest wykonywane, pozostawiając w całości wyliczenie. W tym przypadku widzimy, że przyszłe iteracje nie mają miejsca i zwracany jest nil
.
chociaż ta ucieczka jest pożądana, co jeśli musimy zwrócić coś innego niżnil
? Na szczęście zarówno break
, jak i next
akceptują argument, aby ręcznie ustawić wartość zwracaną.
przekazywanie argumentów
najpierw spójrzmy, jak to działa z break
:
a = a.each do |num|
break num if num < 2
puts num
end# console output
=> 1
tutaj przekazaliśmy num
jako argument do break
(pamiętaj, że nawiasy są opcjonalne w Rubim, więc break num
I break(num)
są obliczane identycznie) i ręcznie określa wartość zwracaną. Jeśli kiedykolwiek powinieneś zwrócić coś innego niż nil
, gdy break
jest wyzwalane, może to być wyjątkowo przydatne.