В Ruby, как пропустить цикл в цикле .each, аналогичный continue на других языках?
В Ruby, как мне пропустить цикл в цикле .each, аналогично 'continue'
Ответ 1
Используйте next:
(1..10).each do |a|
  next if a.even?
  puts a
end
печатает:
1
3   
5
7
9
Для дополнительной прохлады проверьте также redo и retry.
Работает также для таких друзей, как 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 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, а не к внутреннему блоку.
