Passerer argumenter til vanlige iterasjonsfluktmetoder for bedre kontroll i enumerables.
Ruby gir to måter å rømme fra en enumerable: next
vil gå inn i neste iterasjon uten videre evaluering, og break
vil gå ut av enumerable helt.
La oss ta en rask titt på begge med noen enkle eksempler.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
i eksemplet ovenfor ser vi at1
ikke skrives ut på konsollen, fordi kallet tilnext
utløser på den første iterasjonen (1 er mindre enn 2), hopper overputs
uttalelse. Betingelsen er ikke oppfylt i de følgende to iterasjonene ogputs
setningsutgangenenum
til konsollen, som forventet, etterfulgt av en retur av a
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
med break
har noe helt annet skjedd. Her, på den første iterasjonen, blir 1 igjen vurdert som mindre enn 2, og så blir vårt kall til break
utført, slik at tallet helt. I dette tilfellet ser vi at fremtidige iterasjoner ikke finner sted og nil
returneres.
mens denne flukten er ønskelig, hva om vi trengte å returnere noe annet enn nil
? Heldigvis aksepterer både break
og next
et argument for å angi en returverdi manuelt.
Bestått argumenter
Først, la Oss se på hvordan det fungerer med break
:
a = a.each do |num|
break num if num < 2
puts num
end# console output
=> 1
her har vi passert num
som argument til break
(Husk at parenteser er valgfrie i ruby, så break num
og break(num)
evalueres identisk) og Spesifiseres manuelt returverdien. Hvis du skulle trenge å returnere noe annet enn nil
når break
utløses, kan dette være svært nyttig.