318 votes

En Ruby, comment sauter une boucle dans une boucle .each, de façon similaire à 'continue' ?

En Ruby, comment sauter une boucle dans une boucle .each, de façon similaire à 'continue' ?

565voto

Jakub Hampl Points 19161

Utilisez next :

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

des empreintes :

1
3   
5
7
9

Pour plus de fraîcheur, consultez aussi redo y retry .

Cela fonctionne aussi pour les 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 .

48voto

Yuki Izumi Points 7493

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 aussi dire next n pour "retourner" n 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 revient du plus proche def et jamais un bloc ; s'il n'y a pas d'environnement def , return est une erreur.

Utilisation de return à l'intérieur d'un bloc intentionnellement peut être déroutant. Par exemple :

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

my_fun aura pour résultat "Hello." pas [1, "Hello.", 2] parce que le return Le mot clé se rapporte à l'extérieur def et non le bloc intérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X