En Ruby, comment sauter une boucle dans une boucle .each
, semblable à continue
dans d'autres langues?
Utilisez next
:
(1..10).each do |a|
next if a.even?
puts a
end
impressions:
1
3
5
7
9
Pour plus de fraîcheur, consultez également redo
et retry
.
Fonctionne également pour des amis comme times
, upto
, downto
, each_with_index
, select
, map
et d'autres itérateurs (et plus généralement de blocs).
Pour plus d'informations, voir http://Ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL .
next
- c'est comme return
, mais pour les blocs! (Vous pouvez donc utiliser ceci dans n'importe quel proc
/lambda
aussi.)
Cela signifie que vous pouvez également 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 renvoie du plus proche def
, et jamais un bloc; S'il n'y a pas de voisinage def
, return
ing est une erreur.
L'utilisation intentionnelle de return
à l'intérieur d'un bloc peut prêter à confusion. Par exemple:
def my_fun
[1, 2, 3].map do |e|
return "Hello." if e == 2
e
end
end
my_fun
donnera "Hello."
et non pas [1, "Hello.", 2]
, car le mot clé return
concerne le def
extérieur, pas le bloc interne.