En Ruby, comment sauter une boucle dans une boucle .each, de façon similaire à 'continue' ?
Réponses
Trop de publicités?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 .
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.