比较 Ruby 中已处理的 RuntimeError

Lor*_*ein 3 ruby exception

当我处理 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)

Aru*_*hit 5

答案如下:

\n\n
begin\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\n
Run Code Online (Sandbox Code Playgroud)\n\n

文档#==说:

\n\n
\n

Equality\xe2\x80\x94如果 obj 不是异常,则返回 false。否则,true如果 exc 和 obj 共享相同的类、消息和 backtrace ,则返回。

\n
\n\n

现在,在您的情况下e,并且err有 2 个不同的backtrace,因此它返回false

\n