如果我想做这样的事情:
collection.each do |i|
return nil if i == 3
..many lines of code here..
end
我将如何获得这种效果?我知道我可以将所有内容包装在一个大的if语句中,但是如果可能的话,我想避免嵌套。
休息就不会在这里工作,因为我不希望停止其余元素的迭代。
Answers:
next
块内部返回该块。break
块中的内容从产生该块的函数返回。因为each
这意味着break
退出循环并next
跳转到循环的下一个迭代(即名称)。您可以使用next value
和返回值break value
。
break value
没有为我工作,但next value
工作得很好。非常感谢。
next
和break
不以任何方式向特定循环结构,所以你链接的文章很误导(因为它在很大程度上意味着对面)。而且,我的描述在块中使用next
和时绝对是正确的break
(请注意,while
并且for
在Ruby中很少使用,即使有过使用,所以next
和的使用率有99%break
在块内)。
在这种情况下,可以使用break提前终止循环:
collection.each do |i|
break if i == 3
...many lines
end
...当然,这是假设您实际上并不想返回一个值,只是打破常规。
break
在Ruby中-break 5
会导致each
返回5
next value
和break value
。正是我想要的。