Passing argumenter til fælles iteration undslippe metoder til bedre kontrol i enumerables.
Ruby giver to måder at undslippe fra en enumerable:next
vil indtaste den næste iteration uden yderligere evaluering, ogbreak
vil afslutte fra enumerable helt.
lad os tage et hurtigt kig på begge med nogle enkle eksempler.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
i ovenstående eksempel ser vi, at 1
ikke udskrives til konsollen, fordi opkaldet til next
udløser den første iteration (1 er mindre end 2), springer puts
erklæring. Den betingede er ikke opfyldt i de følgende to iterationer og puts
udsagnsudgange num
til konsollen, som forventet, efterfulgt af en retur af a
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
med break
noget helt andet er sket. Her på den første iteration evalueres 1 igen som værende mindre end 2, og så udføres vores opkald til break
, hvilket efterlader tælleren helt. I dette tilfælde ser vi, at fremtidige iterationer ikke finder sted, og nil
returneres.
selvom denne flugt er ønskelig, hvad hvis vi havde brug for at returnere noget andet end nil
? Heldigvis accepterer både break
og next
et argument for manuelt at indstille en returværdi.
passerende argumenter
lad os først 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 bestået num
som argumentet til break
(Husk at parenteser er valgfri i Ruby, så break num
og break(num)
evalueres identisk) og manuelt angivet returværdien. Hvis du nogensinde skulle have brug for at returnere noget andet end nil
når break
udløses, kan dette være usædvanligt nyttigt.