私がこのようなことをしたい場合:
collection.each do |i|
return nil if i == 3
..many lines of code here..
end
どうすればその効果を得ることができますか?ブロック内のすべてを大きなifステートメントでラップできることはわかっていますが、可能であればネストは避けたいと思います。
残りの要素の反復を停止したくないので、ここではブレークは機能しません。
回答:
nextブロック内はブロックから戻ります。breakブロック内は、ブロックに譲った関数から戻ります。eachこの手段breakのループを終了し、nextループ(したがって名前)の次の繰り返しにジャンプします。next valueとで値を返すことができますbreak value。
break valueうまくいきましたが、私にnext valueはうまくいきませんでした。どうもありがとう。
nextでbreakあり、ループ構造に固有のものではないため、リンクした記事は非常に誤解を招く可能性があります(反対のことを強く示唆しているため)。そして、私の説明は間違いなくときに正しいですnextし、breakブロック内で使用されている(なおwhileやfor、これまでの用途の99%ので、Rubyで使用した場合、まれにしかありませんnextし、breakブロック内にあります)。
この場合、breakを使用してループを早期に終了できます。
collection.each do |i|
break if i == 3
...many lines
end
...もちろん、これは、実際に値を返すことを目的としておらず、ブロックから抜け出すことを前提としています。
breakRubyで-break 5原因となりますeach。5.を返すために
next valueおよびの+1break value。まさに私が探していたもの。