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 回答