In Ruby, wie überspringe ich eine Schleife in einer .each
Schleife, ähnlich wie continue
in anderen Sprachen?
- Äquivalent von "continue" in Ruby (7 Antworten )
Antworten
Zu viele Anzeigen?Verwenden Sie next
:
(1..10).each do |a|
next if a.even?
puts a
end
druckt:
1
3
5
7
9
Für zusätzliche Coolness schauen Sie sich auch redo
und retry
an.
Funktioniert auch für Freunde wie times
, upto
, downto
, each_with_index
, select
, map
und andere Iteratoren (und allgemein Blöcke).
Weitere Informationen finden Sie unter http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL.
next
- es ist wie return
, aber für Blöcke! (So können Sie dies auch in jeder proc
/lambda
verwenden.)
Das bedeutet, dass Sie auch next n
sagen können, um n
aus dem Block "zurückzugeben". Beispielsweise:
puts [1, 2, 3].map do |e|
next 42 if e == 2
e
end.inject(&:+)
Dies wird 46
ergeben.
Beachten Sie, dass return
immer vom nächsten def
zurückgibt und niemals von einem Block; wenn es kein umgebendes def
gibt, ist das Zurückgeben ein Fehler.
Das Verwenden von return
absichtlich innerhalb eines Blocks kann verwirrend sein. Beispielsweise:
def my_fun
[1, 2, 3].map do |e|
return "Hello." if e == 2
e
end
end
my_fun
wird zu "Hello."
führen, nicht zu [1, "Hello.", 2]
, weil das Schlüsselwort return
sich auf das äußere def
bezieht, nicht auf den inneren Block.