Passando argomenti a metodi di escape iterazione comuni per un migliore controllo in enumerables.
Ruby fornisce due mezzi di escape da un enumerable:next
entrerà nell’iterazione successiva senza ulteriori valutazioni ebreak
uscirà completamente dall’enumerable.
Diamo una rapida occhiata a entrambi con alcuni semplici esempi.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
Nell’esempio qui sopra vediamo che 1
non è stampato sulla console, perché la chiamata di next
trigger alla prima iterazione (1 a meno di 2), saltando il puts
istruzione. Il condizionale non è soddisfatto nelle due iterazioni seguenti e l’istruzioneputs
restituiscenum
alla console, come previsto, seguito da un ritorno dia
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
Conbreak
è successo qualcosa di completamente diverso. Qui, alla prima iterazione, 1 viene nuovamente valutato come inferiore a 2, e quindi viene eseguita la nostra chiamata a break
, lasciando completamente l’enumerabile. In questo caso, vediamo che le iterazioni future non hanno luogo e viene restituito nil
.
Mentre questa escape è desiderabile, cosa succede se dovessimo restituire qualcosa di diverso danil
? Fortunatamente, siabreak
chenext
accettano un argomento per impostare manualmente un valore restituito.
il Passaggio di argomenti
in Primo luogo, diamo un’occhiata a come funziona con break
:
a = a.each do |num|
break num if num < 2
puts num
end# console output
=> 1
Qui abbiamo passato num
come argomento break
(ricordo che le parentesi sono opzionali in Ruby, così break num
e break(num)
sono valutati in modo identico) e specificato manualmente il valore di ritorno. Se dovesse mai essere necessario restituire qualcosa di diverso da nil
quando viene attivatobreak
, questo può essere eccezionalmente utile.