在Ruby中,我如何在.each循环中跳过一个循环,类似于在其他语言中继续?


当前回答

接下来,它就像返回一样,但是是块!(所以你也可以在任何proc/lambda中使用这个。)

这意味着你也可以说next n从block中“返回”n。例如:

puts [1, 2, 3].map do |e|
  next 42 if e == 2
  e
end.inject(&:+)

结果是46。

注意return总是从最接近的def返回,而不是块;如果周围没有def,返回是一个错误。

故意在块内使用return from可能会令人困惑。例如:

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,而不是内部的块。

其他回答

接下来,它就像返回一样,但是是块!(所以你也可以在任何proc/lambda中使用这个。)

这意味着你也可以说next n从block中“返回”n。例如:

puts [1, 2, 3].map do |e|
  next 42 if e == 2
  e
end.inject(&:+)

结果是46。

注意return总是从最接近的def返回,而不是块;如果周围没有def,返回是一个错误。

故意在块内使用return from可能会令人困惑。例如:

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,而不是内部的块。

使用下一个:

(1..10).each do |a|
  next if a.even?
  puts a
end

打印:

1
3   
5
7
9

对于其他冷却检查,请重做并重试。

也适用于朋友,如times, upto, downto, each_with_index, select, map和其他迭代器(更普遍的是块)。

欲了解更多信息,请参阅http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL。