2015-12-11 64 views
0

我想保留對StandardError子類中的對象的引用。覆蓋StandardError子類的初始化

我的第一反應是覆蓋initialize併爲其分配(提供attr_reader),即:

class UnprocessableCardError < StandardError 
    attr_reader :card 

    def initialize(msg, card = nil) 
     @card = card 
     super msg 
    end 
    end 

不幸的是這會導致backtrace must be Array of String當我使用fail,即:

fail UnprocessableCardError, "Message", card_obj 
+1

您可以編輯您的問題,以顯示您如何使用這與' fail'? –

+0

@Jordan你正確的在你回答,問題更新,謝謝! – dukedave

回答

0

我猜你正在試圖做到這一點:

fail UnprocessableCardError, "Message", card_obj 

的問題是,你傳遞三個參數failfail預期第三個參數(如果存在的話)是回溯,預期它是一串字符串。

你仍然可以使用你的異常類,不過,像這樣:

fail UnprocessableCardError.new("Message", card_obj) 

這按預期工作:

begin 
    fail UnprocessableCardError.new("Message", 12345) 
rescue UnprocessableCardError => ex 
    puts ex.card 
end 
# => 12345 
0

我現在不滿意的解決方法是:

必須因此被稱爲:

fail UnprocessableCardError.with_card card, 'some reason'