在Ruby中,如何在.each循环中跳过一个循环,类似于其他语言中的continue ?
.each
continue
使用next:
next
(1..10).each do |a| next if a.even? puts a end
打印:
1 3 5 7 9
为了获得额外的凉爽,还可以查看redo和retry。
redo
retry
也适用于朋友像times, upto, downto, each_with_index, select, map和其他迭代器(和更普遍的块)。
times
upto
downto
each_with_index
select
map
更多信息见http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL。
next -它类似于return,但用于块!(所以你也可以在任何proc/lambda中使用它。)
return
proc
lambda
这意味着你也可以用next n从块中“返回”n。例如:
next n
n
puts [1, 2, 3].map do |e| next 42 if e == 2 e end.inject(&:+)
这将产生46。
46
注意,return 总是从最近的def返回,而不是块;如果周围没有def,则returning是一个错误。
def
在块中故意使用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,而不是内部块。
my_fun
"Hello."
[1, "Hello.", 2]