Ruby ist leider etwas anders. PS: Mein Gedächtnis ist etwas verschwommen, also entschuldige mich, wenn ich falsch liege
Anstelle von break / continue gibt es break / next, die sich in Bezug auf Schleifen gleich verhalten
Schleifen (wie alles andere auch) sind Ausdrücke und "geben" das Letzte zurück, was sie getan haben. Meistens ist es sinnlos, den Rückgabewert aus einer Schleife zu erhalten, also macht das einfach jeder
a = 5
while a < 10
a + 1
end
Sie können dies jedoch tun
a = 5
b = while a < 10
a + 1
end # b is now 10
JEDOCH "emuliert" viel Ruby-Code eine Schleife mithilfe eines Blocks. Das kanonische Beispiel ist
10.times do |x|
puts x
end
Da es viel häufiger vorkommt, dass Menschen Dinge mit dem Ergebnis eines Blocks tun möchten, wird es hier unordentlich. break / next bedeuten verschiedene Dinge im Kontext eines Blocks.
break springt aus dem Code heraus, der den Block aufgerufen hat
next überspringt den Rest des Codes im Block und gibt das, was Sie angeben, an den Aufrufer des Blocks zurück. Ohne Beispiele macht das keinen Sinn.
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.
Also ja. Ruby ist großartig, aber es gibt einige schreckliche Eckfälle. Dies ist das zweitschlechteste, das ich in meinen Jahren gesehen habe :-)