99

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

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

   ..many lines of code here..
end

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

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

4

3 に答える 3

192

nextブロック内はブロックから戻ります。breakブロック内では、ブロックに渡された関数から戻ります。eachこれは、 がループを終了breakし、ループnextの次の繰り返しにジャンプすることを意味します (つまり、名前)。next valueと で値を返すことができますbreak value

于 2010-03-25T18:03:34.303 に答える
12
#!/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}"
于 2010-03-25T18:11:25.217 に答える
5

この場合、break を使用してループを早期に終了できます。

collection.each do |i|
  break if i == 3
  ...many lines
end

...もちろん、これは、実際に値を返そうとしているのではなく、単にブロックから抜け出すことを前提としています。

于 2010-03-25T17:54:19.473 に答える