Мне никогда не приходилось делать это в Ruby, но мой босс, будучи программистом на C, поставил передо мной проблему, для которой я, честно говоря, не могу предложить элегантное решение в Ruby, не делая это в основном в Cпуть (отслеживание переменной с использованием двух операторов "break").
У нас есть такая ситуация (синтаксический анализ XML):
(1..1000).each do |page|
fetch_page(page).results.each do |results|
do_something_with_results!
break if results[:some_value] > another_value # this needs to exit BOTH blocks
end
end
Единственный способ сделать это -способ, который я бы не назвал очень похожим на Ruby, а скорее на C-образное мышление.Что-то вроде:
(1..1000).each do |page|
should_break = false
fetch_page(page).results.each do |results|
do_something_with_results!
if results[:some_value] > another_value
should_break = true
break
end
end
break if should_break
end
Мне кажется, что это неправильно и не похоже на Ruby, но каков функциональный подход?