首页 文章

在Ruby中,如何跳过.each循环中的循环,类似于'continue' [重复]

提问于
浏览
293

这个问题在这里已有答案:

在Ruby中,如何跳过 .each 循环中的循环,类似于其他语言中的 continue

2 回答

  • 513

    使用 next

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

    打印:

    1
    3   
    5
    7
    9
    

    如需额外的凉爽,请查看 redoretry .

    也适用于像 timesuptodowntoeach_with_indexselectmap 和其他迭代器(以及更常见的块)这样的朋友 .

    有关详细信息,请参阅http://ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL .

  • 43

    next - 它就像 return ,但是对于块! (所以你也可以在任何 proc / lambda 中使用它 . )

    这意味着你也可以从块中说 next n 到"return" n . 例如:

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

    这将产生 46 .

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

    故意使用块内的 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 ,而不是内部块 .

相关问题