如果我想做这样的事情:
collection.each do |i|
return nil if i == 3
..many lines of code here..
end
我将如何获得这种效果?我知道我可以在一个大的if语句中将所有内容包装在块中,但是如果可能的话我想避免嵌套。
Break在这里不起作用,因为我不想要停止剩余元素的迭代。
答案 0 :(得分:155)
next
从块返回。块内的break
从产生块的函数返回。对于each
,这意味着break
退出循环,next
跳转到循环的下一次迭代(因此名称)。您可以使用next value
和break 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
...当然,这假设你实际上并没有想要返回一个值,只是突破了。