在Ruby中,如何跳过
.each
循环(类似于其他语言中的continue
)?#1 楼
使用next
:(1..10).each do |a|
next if a.even?
puts a
end
印刷品:
1
3
5
7
9
要获得更多的凉爽性,还请检查
redo
和retry
。 br /> 也可用于
times
,upto
,downto
,each_with_index
,select
,map
和其他迭代器(以及更常见的块)之类的朋友。有关更多信息,请参见http:// ruby -doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL。
#2 楼
next
-就像return
一样,只是块! (因此您也可以在任何proc
/ lambda
中使用它。)这意味着您还可以说
next n
从块中“返回” n
。例如:puts [1, 2, 3].map do |e|
next 42 if e == 2
e
end.inject(&:+)
这将产生
46
。请注意,
return
始终从最接近的def
返回,并且永远不会阻塞。如果周围没有def
,则return
是错误的。故意在一个块内使用
return
可能会造成混淆。例如:def my_fun
[1, 2, 3].map do |e|
return "Hello." if e == 2
e
end
end
my_fun
将导致"Hello."
而不是[1, "Hello.", 2]
,因为return
关键字属于外部def
而不是内部块。评论
给出下一个n的示例而不是return foo会更有趣。
– ANeves认为SE是邪恶的
2013年9月26日在12:04
@ANeves感谢您的反馈;已修改以更好地对比下一个/返回。
–阿什拉
2013年9月26日14:06
评论
是的,虽然break并不是那么酷(并且更有用;)。
–雅各布·汉普(Jakub Hampl)
2010-11-19 23:47
在这种情况下,中断是错误的答案。它停止.each而不只是保持1个循环。 ;)
–thanhnha1103
16年6月20日在10:39