如果我想要做这样的事情:如何从一个区块提前返回某些内容?
collection.each do |i|
return nil if i == 3
..many lines of code here..
end
我怎么会得到这种效果?我知道我可以在一个大的if语句中将所有内容都包裹起来,但是如果可能的话我想避免嵌套。
休息不会在这里工作,因为我做不是想停止迭代其余元素。
如果我想要做这样的事情:如何从一个区块提前返回某些内容?
collection.each do |i|
return nil if i == 3
..many lines of code here..
end
我怎么会得到这种效果?我知道我可以在一个大的if语句中将所有内容都包裹起来,但是如果可能的话我想避免嵌套。
休息不会在这里工作,因为我做不是想停止迭代其余元素。
next
块内返回块。 break
块内返回从块产生的功能。对于each
这意味着break
退出循环,并且next
跳转到循环的下一个迭代(因此名称)。您可以使用next value
和break value
返回值。
在这种情况下,你可以使用break来终止循环早期:
collection.each do |i|
break if i == 3
...many lines
end
......当然,这是假设你没有真正打算返回一个值,只是打出来的该块。
#!/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}"
谢谢@jd,在减少方面效果很好。 – Joe 2017-07-26 16:06:31
'next'是我一直在寻找的,谢谢。 – ryeguy 2010-03-25 18:39:42
用于“下一个值”和“中断值”。正是我在找什么。 – 2012-11-30 20:41:47
'break value'对我不起作用,而'next value'工作正常。非常感谢。 – 2013-09-21 15:10:30