0
Рассмотрим Rake задачу:Rake управления исключением
namespace :foo do
task :bar do
begin
raise 'foo'
rescue RuntimeError => ex
raise ex.class, 'bar', ex.backtrace
end
end
end
Это приводит следующий вывод:
rake aborted!
bar
/home/vagrant/proj/lib/tasks/foo.rake:52:in `block (2 levels) in <top (required)>'
/home/vagrant/.gem/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load'
/home/vagrant/.gem/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `block in load'
/home/vagrant/.gem/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:240:in `load_dependency'
/home/vagrant/.gem/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load'
-e:1:in `<main>'
foo
/home/vagrant/proj/lib/tasks/foo.rake:52:in `block (2 levels) in <top (required)>'
/home/vagrant/.gem/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load'
/home/vagrant/.gem/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `block in load'
/home/vagrant/.gem/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:240:in `load_dependency'
/home/vagrant/.gem/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load'
-e:1:in `<main>'
Tasks: TOP => foo:bar
(See full trace by running task with --trace)
Как вы можете видеть, есть и исключение оригинальный (foo
), а также новый (bar
). Почему? Я бы предпочел исключение foo
, которое было правильно спасено, чтобы не отображаться здесь.
Спасибо за ваш ответ @ yhirano55. Однако, боюсь, я до сих пор не понимаю, почему сообщение первого исключения было бы в обратном направлении вообще? Насколько я знаю, это не стандартное поведение Ruby? – user4867444