【发布时间】:2014-02-23 22:22:00
【问题描述】:
当我处理 Ruby 异常并将其与我构造的异常对象进行比较时,它的计算结果为 false。为什么会这样?
举个具体的例子,为什么会打印false?
begin
raise "An error happened"
rescue => e
end
err = RuntimeError.new("An error happened")
puts e == err
【问题讨论】:
当我处理 Ruby 异常并将其与我构造的异常对象进行比较时,它的计算结果为 false。为什么会这样?
举个具体的例子,为什么会打印false?
begin
raise "An error happened"
rescue => e
end
err = RuntimeError.new("An error happened")
puts e == err
【问题讨论】:
这是答案:
begin
raise "An error happened"
rescue => e
end
err = RuntimeError.new("An error happened")
[e.backtrace,err.backtrace] # => [["-:2:in `<main>'"], nil]
[e.class,err.class] # => [RuntimeError, RuntimeError]
[e.message,err.message] # => ["An error happened", "An error happened"]
puts e == err
# >> false
#== 的文档说:
平等——如果 obj 不是异常,则返回 false。否则,如果 exc 和 obj 共享相同的类、消息和回溯,则返回
true。
现在,在您的情况下,e 和 err 有 2 个不同的 backtrace,因此它返回 false。
【讨论】: