【问题标题】:Comparing a handled RuntimeError in Ruby比较 Ruby 中已处理的 RuntimeError
【发布时间】: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 exception


    【解决方案1】:

    这是答案:

    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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-13
      • 2022-09-23
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2019-05-10
      • 2014-08-19
      • 1970-01-01
      相关资源
      最近更新 更多