Если external_method
нужно много чего сделать, но только если выполнено условие на n
, вы всегда можете вернуться, если это условие не будет выполнено, что приведет к разрыву или переходу к следующей итерации, поскольку вызов метода является единственной операцией в блоке:
def external_method(n)
return unless n.even?
puts "running block on #{n}"
end
(1..9).map { |i| external_method(i) }
Если блок имеет больше, чем просто вызов метода, и на основе условия в вызове метода вы хотите пропустить все остальные блок, вы можете попробовать ruby throw
/ catch
:
def external_method(n)
throw :next unless n.even?
end
(1..9).map do |i|
catch(:next) do
external_method(i)
puts "running block on #{i}"
end
end
Вывод обоих этих фрагментов кода:
running block on 2
running block on 4
running block on 6
running block on 8