如何从块中提早返回?

时间:2010-03-25 17:51:37

标签: ruby

如果我想做这样的事情:

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

   ..many lines of code here..
end

我将如何获得这种效果?我知道我可以在一个大的if语句中将所有内容包装在块中,但是如果可能的话我想避免嵌套。

Break在这里不起作用,因为我想要停止剩余元素的迭代。

3 个答案:

答案 0 :(得分:155)

块内的

next从块返回。块内的break从产生块的函数返回。对于each,这意味着break退出循环,next跳转到循环的下一次迭代(因此名称)。您可以使用next valuebreak value返回值。

答案 1 :(得分:10)

#!/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}"

答案 2 :(得分:5)

在这种情况下,您可以使用break来提前终止循环:

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

...当然,这假设你实际上并没有想要返回一个值,只是突破了。