私がこのようなことをしたい場合:
collection.each do |i|
return nil if i == 3
..many lines of code here..
end
どうすればその効果を得ることができますか?ブロック内のすべてを大きな if ステートメントでラップできることはわかっていますが、可能であればネストを避けたいと思います。
残りの要素の反復を停止したくないため、ここでは Break は機能しません。
next
ブロック内はブロックから戻ります。break
ブロック内では、ブロックに渡された関数から戻ります。each
これは、 がループを終了break
し、ループnext
の次の繰り返しにジャンプすることを意味します (つまり、名前)。next value
と で値を返すことができますbreak value
。
#!/usr/bin/ruby
collection = [1, 2, 3, 4, 5 ]
stopped_at = collection.each do |i|
break i if i == 3
puts "Processed #{i}"
end
puts "Stopped at and did not process #{stopped_at}"
この場合、break を使用してループを早期に終了できます。
collection.each do |i|
break if i == 3
...many lines
end
...もちろん、これは、実際に値を返そうとしているのではなく、単にブロックから抜け出すことを前提としています。