2014-02-23 27 views
2

當我處理Ruby異常並將其與我構造的異常對象進行比較時,它的計算結果爲false。這是爲什麼?比較Ruby中處理的RuntimeError

舉一個具體的例子,爲什麼打印false

begin 
    raise "An error happened" 
rescue => e 
end 

err = RuntimeError.new("An error happened") 
puts e == err 

回答

4

下面是答案:

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個不同回溯,因此返回false