Techioz Blog

ブロックから何かを早く返すにはどうすればよいですか?

概要

このようなことをしたい場合:

collection.each do |i|
   return nil if i == 3

   ..many lines of code here..
end

どうすればその効果を得ることができますか?ブロック内のすべてを大きな if ステートメントでラップできることはわかっていますが、できればネストは避けたいと考えています。

残りの要素の反復を停止したくないため、ここでは Break は機能しません。

解決策

ブロック内の次はブロックから戻ります。ブロック内のブレークは、ブロックに渡した関数から戻ります。それぞれの場合、これは、break がループを終了し、next がループの次の反復にジャンプすることを意味します (したがって、名前が付けられます)。次の値とブレーク値を含む値を返すことができます。