我想在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
答案 0 :(得分:0)
我目前不太满意的解决方法是:
class UnprocessableCardError < StandardError
attr_reader :card
def self.with_card(card, msg)
new(msg).tap do |error|
error.instance_variable_set :@card, card
end
end
end
必须这样称呼:
fail UnprocessableCardError.with_card card, 'some reason'
答案 1 :(得分:0)
我猜你正在尝试这样做:
fail UnprocessableCardError, "Message", card_obj
问题在于你将三个参数传递给fail
,fail
期望第三个参数(如果存在)是回溯,它应该是一个字符串数组
你仍然可以使用你的异常类,如下所示:
fail UnprocessableCardError.new("Message", card_obj)
这可以按预期工作:
begin
fail UnprocessableCardError.new("Message", 12345)
rescue UnprocessableCardError => ex
puts ex.card
end
# => 12345