2

当我调用时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但是,当我通过调用具有错误数量参数的方法来引发 real 时, backtrace_locationsis 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 错误?

在这一点上,我认为这是一个错误,并报告了它

4

1 回答 1

2

这是一个错误,维护者 ko1 刚刚在修订版 44411 中修复了它。希望它能够在今天的 Ruby 2.1 版本中发布。

编辑原来它还没有被修复。今天发布的 Ruby 2.1 仍然存在这个问题。

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

于 2013-12-25T09:51:32.953 回答