ArgumentError缺少backtrace_locations吗?

时间:2013-12-24 19:03:59

标签: ruby ruby-2.1

当我调用Exception#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_locationsnil,这对我来说是意外的:

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 个答案:

答案 0 :(得分:2)

这是一个错误,维护者ko1只是修订版44411中的fixed it。希望它能够成为今天发布的Ruby 2.1。

修改结果证明它尚未修复。今天发布的Ruby 2.1仍有这个问题。

编辑根据维护者的说法,修复程序将合并到Ruby 2.1.1中。