2011-12-05 2 views
11

나는 부모 예외 안에 포함 된 원래 예외를 사용하여 예외를 일반적으로 다시 발생시키는 C# 배경에서 왔습니다. Ruby에서 비슷한 개념을 사용할 수 있습니까? 하위 레벨 예외의 컨텍스트를 유지하면서 예외를 감지하고 발생시키는 방법은 무엇입니까?루비 - 하위 예외가있는 예외를 다시 발생

class MyError < StandardError 
    attr_reader :original 
    def initialize(msg, original=nil); 
    super(msg); 
    @original = original; 
    end 
end 
# ... 
rescue => error 
    raise MyError.new("Error B", error) 
end 

답변

14

Avdi 그림 형제에 의해 이야기 Exceptional Ruby에서 트릭을 살펴보십시오

def reraise ex, original 
    ex.original = original 
    raise ex 
end 

rescue StandardError => e 
    reraise ArgumentError.new('Message'), e 
end 

이 방법을 사용하면 표준 루비 사용자 정의 오류뿐만 아니라 사용자를 위해 부모 오류를 설정합니다.

+0

do super (msg)에 msg를 인수로 포함 할 필요가 없습니다. MyError (error)를 발생 시키면, 'some message'가 암시 적 인자로 전달됩니다. – daremkd

4

당신은 연장 할 수있다 StandardError :

class StandardError 
    attr_accessor :original 
end 

하고 예외를 발생시킬 때, 바로이 속성을 설정 :

5

루비 2.1은이 문제를 해결하기 위해 Exception#cause 기능을 추가했습니다.

관련 문제