passerar argument till vanliga iterationsflyktmetoder för bättre kontroll i enumerables.
Ruby ger två sätt att fly från en uppräkningsbar: next
kommer in i nästa iteration utan ytterligare utvärdering, ochbreak
kommer att gå ut från uppräkningsbar helt.
Låt oss ta en snabb titt på båda med några enkla exempel.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
i ovanstående exempel ser vi att 1
skrivs inte ut till konsolen, eftersom samtalet till next
triggers på den första iterationen (1 är mindre än 2), hoppar över puts
uttalande. Villkoret uppfylls inte i följande två iterationer ochputs
uttalande utgångarnum
till konsolen, som förväntat, följt av en retur ava
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
med break
har något helt annat hänt. Här, vid den första iterationen, utvärderas 1 igen som mindre än 2, och så är vårt samtal till break
exekverat och lämnar det uppräknade helt. I det här fallet ser vi att framtida iterationer inte äger rum och nil
returneras.
även om denna flykt är önskvärd, vad händer om vi behövde returnera något annat ännil
? Lyckligtvis accepterar både break
och next
ett argument för att manuellt ställa in ett returvärde.
passande argument
Låt oss först titta på hur det fungerar med break
:
a = a.each do |num|
break num if num < 2
puts num
end# console output
=> 1
Här har vi passerat num
som argument till break
(kom ihåg att parenteser är valfria i Ruby, så break num
och break(num)
utvärderas identiskt) och manuellt angav returvärdet. Om du någonsin skulle behöva returnera något annat än nil
när break
utlöses kan detta vara exceptionellt användbart.