x = StandardError.new(:hello)
y = StandardError.new(:hello)
x == y # => true
x === y # => true
begin
raise x
rescue x
puts "ok" # gets printed
end
begin
raise x
rescue y
puts "ok" # doesn't get printed
end
爲什麼不打印第二個「ok」?我無法弄清楚。我讀過here,紅寶石使用===
運算符來將異常與搶救子句進行匹配,但這顯然不是這種情況。這個救援例子有什麼問題?
我使用Ruby 1.9.3
編輯:所以它看起來像這樣做raise x
,x == y
和x === y
不再持有後。這似乎是因爲x
和y
no longer have the same backtrace。
不,這意味着「捕捉任何StandardError的和子類,並把實例放入變量y」。 'y'不被解釋爲一個值(正如我希望的那樣),而是作爲一個變量名。 – Norswap
我想如果你想在RFID標籤上進行模式匹配,那麼'raise/catch'成語可能不是最清晰的路線。怎麼樣使用模式的'case'語句或動態分派? –
該應用程序有一些與卡通信的「低級」邏輯。這是拋出異常的地方。以上是一些更高層次的應用邏輯。標籤返回的一些錯誤實際上是相當高的水平(比如「該文件已經存在於標籤中」),並且必須回滾給用戶。例外似乎是最好的選擇。 – Norswap