Если в коде есть несколько мест, которые могли бы throw
объект, можно ли выяснить, какой throw
действительно выполняется?
x = catch(:x) do
throw(:x, foo) if foo
throw(:x, bar) if bar
end
Это foo
или bar
(при условии, что значение недостаточно для определения)?
Если бы это было обычное исключение, можно было бы просто проверить трассировку исключения и выяснить, где оно было поднято.
Вопрос вызван отладкой гема warden
, который использует throw
/ catch
для передачи сообщения с нижних уровней промежуточного программного обеспечения на промежуточное программное обеспечение основного драгоценного камня.