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