в Ruby легко указать цикл, чтобы перейти к следующему элементу
(1..10).each do |a|
next if a.even?
puts a
end
result = >
1
3
5
7
9
но что, если мне нужно вызвать следующий извне цикла (например: метод)
def my_complex_method(item)
next if item.even? # this will obviously fail
end
(1..10).each do |a|
my_complex_method(a)
puts a
end
Единственное решение, которое я нашел и работает, - это использовать throw
и catch
как в вопросе SO Как нарушить внешний цикл в Ruby?
def my_complex_method(item)
throw(:skip) if item.even?
end
(1..10).each do |a|
catch(:skip) do
my_complex_method(a)
puts a
end
end
Мой вопрос: кто-нибудь получил более дешевое решение для этого? или throw/catch
только для этого?
И что, если я хочу называть my_complex_method
не только как часть этого цикла (= > не бросать: skip), могу ли я как-то сказать мой метод, который он вызвал из цикла?