care trece argumente la metode comune de evacuare iterație pentru un control mai bun în enumerables.
Ruby oferă două mijloace de scăpare dintr-un enumerabil:next
va intra în următoarea iterație fără o evaluare suplimentară șibreak
va ieși din enumerabil în întregime.
Să aruncăm o privire rapidă la ambele cu câteva exemple simple.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
în exemplul de mai sus vom vedea că1
nu este imprimat la consola, deoarece apelul lanext
declanșează pe prima iterație (1 este mai mică de 2), sărind peste puts
declarație. Condiționalul nu este îndeplinit în următoarele două iterații și declarația puts
iese num
la consolă, așa cum era de așteptat, urmată de o revenire a a
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
cu break
s-a întâmplat ceva complet diferit. Aici, la prima iterație, 1 este din nou evaluat ca fiind mai mic de 2 și astfel apelul nostru la break
este executat, lăsând enumerabilul în întregime. În acest caz, vedem că iterațiile viitoare nu au loc și nil
este returnat.
în timp ce această evadare este de dorit, ce se întâmplă dacă am nevoie pentru a reveni altceva decât nil
? Din fericire, ambelebreak
șinext
acceptă un argument pentru a seta manual o valoare returnată.
trecerea argumentelor
În primul rând, să vedem cum funcționează cu break
:
a = a.each do |num|
break num if num < 2
puts num
end# console output
=> 1
aici am trecut num
ca argument pentru break
(amintiți-vă că parantezele sunt opționale în Ruby, deci break num
și break(num)
sunt evaluate identic) și specificate manual valoarea returnată. Dacă ar trebui vreodată să returnați altceva decâtnil
cândbreak
este declanșat, acest lucru poate fi extrem de util.