2013-12-24 3 views
2

Когда я звоню Exception#backtrace_locations, как правило, возвращает массив, как и предполагалось:У ArgumentError нет backtrace_locations?

begin 
    raise "foo" 
rescue => e 
    p e.backtrace_locations 
end 
# => ["this_file:2:in `<main>'"] 

Это то же самое, если я поднять ArgumentError вручную:

begin 
    raise ArgumentError.new 
rescue => e 
    p e.backtrace_locations 
end 
# => ["this_file:2:in `<main>'"] 

Однако, когда я поднимаю реальный ArgumentError по вызывая метод с неправильным количеством аргументов, backtrace_locations - nil, что для меня неожиданно:

def foo; end 

begin 
    foo(:bar) 
rescue => e 
    p e.backtrace_locations 
end 
# => nil 

При одной и той же ситуации, классические Exception#backtrace возвращает массив, как задумано:

def foo; end 

begin 
    foo(:bar) 
rescue => e 
    p e.backtrace 
end 
# => ["this_file:1:in `foo'", "this_file:4:in `<main>'"] 

возвращаемое значение Exception#backtrace_locations будучи nil в третьем случае, описанном выше предназначены ли? Если да, то когда Exception#backtrace_locations станет nil? Есть ли для этого документация? Или это ошибка Ruby?

На данный момент, я думаю, что это ошибка, и reported it.

+1

Похоже, (если это та же проблема), это еще не в 2.1: https://bugs.ruby-lang.org/issues/8960 – CDub

+0

@CDUB Что значит, что он еще не включен? Предполагается, что он будет реализован в редакции 44170. И метод возвращает 'nil'; он определен. Если он не определен, то он должен скорее повысить неопределенную ошибку. – sawa

+0

За последний комментарий 12 дней назад в вышеперечисленном потоке: «Целевая версия изменилась с текущей: 2.1.0 до следующего второстепенного» ... Я читал, что как «это будет в следующем младшем выпуске, это не в 2.1.0 «. – CDub

ответ

2

Это была ошибка, а сопровождающий ko1 - только fixed it в редакции 44411. Надеюсь, сегодня это произойдет в выпуске Ruby 2.1.

Редактировать Оказывается, он еще не исправлен. У Ruby 2.1, выпущенного сегодня, все еще есть эта проблема.

Редакция Согласно утвердителю, исправление будет включено в Ruby 2.1.1.

Смежные вопросы