Ruby est malheureusement un peu différent. PS: Ma mémoire est un peu floue à ce sujet, donc je m'excuse si je me trompe
au lieu de break / continue, il a break / next, qui se comportent de la même manière en termes de boucles
Les boucles (comme tout le reste) sont des expressions et "renvoient" la dernière chose qu'elles ont faite. La plupart du temps, obtenir la valeur de retour d'une boucle est inutile, donc tout le monde le fait
a = 5
while a < 10
a + 1
end
Vous pouvez cependant le faire
a = 5
b = while a < 10
a + 1
end # b is now 10
CEPENDANT, beaucoup de code ruby «émule» une boucle en utilisant un bloc. L'exemple canonique est
10.times do |x|
puts x
end
Comme il est beaucoup plus courant pour les gens de vouloir faire des choses avec le résultat d'un bloc, c'est là que ça devient salissant. break / next signifie différentes choses dans le contexte d'un bloc.
pause sautera hors du code qui a appelé le bloc
ensuite sautera le reste du code dans le bloc et «retournera» ce que vous spécifiez à l'appelant du bloc. Cela n'a aucun sens sans exemples.
def timesten
10.times{ |t| puts yield t }
end
timesten do |x|
x * 2
end
# will print
2
4
6
8 ... and so on
timesten do |x|
break
x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped
timesten do |x|
break 5
x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5
timesten do |x|
next 5
x * 2
end
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.
Donc voilà. Ruby est génial, mais il a de terribles cas d'angle. C'est le deuxième pire que j'ai vu depuis mes années d'utilisation :-)