381 Stimmen

Im Ruby, wie überspringe ich eine Schleife in einer .each-Schleife, ähnlich wie 'fortsetzen'

In Ruby, wie überspringe ich eine Schleife in einer .each Schleife, ähnlich wie continue in anderen Sprachen?

684voto

Jakub Hampl Punkte 38490

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.

60voto

Asherah Punkte 18163

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X