Ruby purtroppo è un po 'diverso. PS: La mia memoria è un po 'confusa su questo, quindi mi scuso se sbaglio
invece di break / continue, ha break / next, che si comportano allo stesso modo in termini di loop
I loop (come tutto il resto) sono espressioni e "restituiscono" l'ultima cosa che hanno fatto. Il più delle volte, ottenere il valore restituito da un ciclo è inutile, quindi tutti lo fanno
a = 5
while a < 10
a + 1
end
Puoi comunque farlo
a = 5
b = while a < 10
a + 1
end # b is now 10
TUTTAVIA, un sacco di codice ruby 'emula' un ciclo usando un blocco. L'esempio canonico è
10.times do |x|
puts x
end
Poiché è molto più comune per le persone voler fare le cose con il risultato di un blocco, è qui che diventa disordinato. break / next significa cose diverse nel contesto di un blocco.
break salterà fuori dal codice che ha chiamato il blocco
next salterà il resto del codice nel blocco e 'restituirà' ciò che si specifica al chiamante del blocco. Questo non ha alcun senso senza esempi.
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.
Quindi si Ruby è fantastico, ma ha alcuni terribili astucci d'angolo. Questa è la seconda peggiore che abbia mai visto nei miei anni di utilizzo :-)