当我处理 Ruby 异常并将其与我构造的异常对象进行比较时,它的计算结果为 false。为什么会这样呢?
举个具体的例子,为什么会打印这样的内容false?
begin
raise "An error happened"
rescue => e
end
err = RuntimeError.new("An error happened")
puts e == err
Run Code Online (Sandbox Code Playgroud)
答案如下:
\n\nbegin\n raise "An error happened"\nrescue => e\nend\n\nerr = RuntimeError.new("An error happened")\n[e.backtrace,err.backtrace] # => [["-:2:in `<main>\'"], nil]\n[e.class,err.class] # => [RuntimeError, RuntimeError]\n[e.message,err.message] # => ["An error happened", "An error happened"]\nputs e == err\n# >> false\nRun Code Online (Sandbox Code Playgroud)\n\n文档#==说:
\n\n\nEquality\xe2\x80\x94如果 obj 不是异常,则返回 false。否则,
\ntrue如果 exc 和 obj 共享相同的类、消息和 backtrace ,则返回。
现在,在您的情况下e,并且err有 2 个不同的backtrace,因此它返回false。