块内的 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
...当然,这是假设您实际上并不想返回一个值,只是跳出块。
break
的值 — break 5
将导致 each
返回 5。
break value
对我不起作用,而next value
工作正常。非常感谢。next
和break
绝不是特定于循环结构的,因此您链接的文章非常具有误导性(因为它在很大程度上暗示了相反的意思)。当next
和break
在块内使用时,我的描述绝对正确(请注意,while
和for
在 Ruby 中很少使用,如果有的话,所以 99% 的使用next
和break
在块内)。