我怎样才能从一个块早期返回一些东西?

如果我想要做这样的事情:

collection.each do |i| return nil if i == 3 ..many lines of code here.. end 

我将如何得到这种效果? 我知道我可以用一个大的if语句将所有内容都包裹起来,但是如果可能的话,我想避免嵌套。

rest不会在这里工作,因为我不想停止迭代其余的元素。

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

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

在这种情况下,可以使用break来尽早终止循环:

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

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