A Ruby, comment sauter une boucle en a. chaque boucle, similaire à' continue ' [dupliquer]

cette question a déjà une réponse ici:

dans Ruby, comment sauter une boucle dans une boucle .each , similaire à continue dans d'autres langues?

289
demandé sur user3430287 2010-11-20 02:32:30
la source

2 ответов

utiliser next :

(1..10).each do |a|
  next if a.even?
  puts a
end

imprime:

1
3   
5
7
9

pour plus de fraîcheur, vérifier aussi redo et retry .

fonctionne aussi pour des amis comme times , upto , downto , each_with_index , select , map et d'autres itérateurs (et plus généralement des blocs).

pour plus d'informations, voir http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL .

506
répondu Jakub Hampl 2010-11-21 03:01:16
la source

next - c'est comme return , mais pour les blocs! (Vous pouvez donc l'utiliser dans n'importe quel proc / lambda aussi.)

cela signifie que vous pouvez également dire next n à" retourner n à partir du bloc. Par exemple:

puts [1, 2, 3].map do |e|
  next 42 if e == 2
  e
end.inject(&:+)

Cela donnera 46 .

notez que return toujours retourne du plus proche def , et jamais un bloc; s'il n'y a pas entourant def , return ing est une erreur.

L'utilisation de return à l'intérieur d'un bloc peut être source de confusion. Par exemple:

def my_fun
  [1, 2, 3].map do |e|
    return "Hello." if e == 2
    e
  end
end

my_fun résultera en "Hello." , pas [1, "Hello.", 2] , parce que le mot-clé return se rapporte à l'extérieur def , pas le bloc intérieur.

43
répondu Ashe 2014-01-31 08:28:32
la source

Autres questions sur ruby syntax loops iteration