残念ながら、Ruby は少し異なります。PS: 記憶が曖昧なので間違っていたらすみません
ブレーク/コンティニューの代わりに、ループに関して同じように動作するブレーク/ネクストがあります
ループ (他のすべてのものと同様) は式であり、最後に実行したことを「返します」。ほとんどの場合、ループからの戻り値の取得は無意味なので、誰もがこれを行うだけです
a = 5
while a < 10
a + 1
end
ただし、これを行うことができます
a = 5
b = while a < 10
a + 1
end # b is now 10
しかし、多くの ruby コードは、ブロックを使用してループを「エミュレート」します。標準的な例は
10.times do |x|
puts x
end
ブロックの結果を使って何かをしたいと思うことの方がはるかに一般的であるため、ここが厄介なところです。ブレーク/次は、ブロックのコンテキストでは異なることを意味します。
break は、ブロックを呼び出したコードから飛び出します
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番目に悪いものです:-)