如果我想做这样的事情:
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。正是我想要的。