Rubyは残念ながら少し異なります。PS:私の記憶はこれで少しかすんでいるので、私が間違っているとすみません
break / continueの代わりに、break / nextがあり、ループに関して同じように動作します。
ループは(他のすべてと同様に)式であり、ループが行った最後のことを「返す」。ほとんどの場合、ループからの戻り値の取得は無意味なので、誰もがこれを行うだけです
a = 5
while a < 10
a + 1
end
あなたはこれを行うことができます
a = 5
b = while a < 10
a + 1
end # b is now 10
ただし、多くのルビコードは、ブロックを使用してループを「エミュレート」します。正規の例は
10.times do |x|
puts x
end
ブロックの結果を使って物事をやりたがる方がはるかに一般的であるので、ここが乱雑になる場所です。break / nextは、ブロックのコンテキストで異なることを意味します。
ブレークは、ブロックを呼び出したコードからジャンプします
nextは、ブロック内の残りのコードをスキップし、指定したものをブロックの呼び出し元に「返します」。これは例がなければ意味がありません。
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.
そうそう。Rubyは素晴らしいですが、ひどいコーナーケースがあります。これは、私が長年使用してきた中で2番目に悪いものです:-)