2012-03-08 3 views
2

이상한 제목에 대해 유감스럽게 생각합니다.이 문제를 어떻게 분류해야하는지 잘 모르겠습니다. 나는 루비 코드를 1.9.3으로 업데이트하는 중이며 이상한 행동을보고있다. 이 문제를 증류, 내가 얻을 :루비 버전 간의 묵시적인 예외 클래스 차이점

def convert(exception) 
    raise exception.message 
end 

begin 
    convert(StandardError.new(StandardError)) 
rescue => e 
    puts e.class 
end 

1.9.2에서 출력이

StandardError 

및 1.9.3에서, 테 출력은 루비 문서 불구 찾고

RuntimeError 

입니다 릴리스 노트는 실제로 여기서 일어날 수있는 일에 대한 단서를 전혀주지 않았기 때문에 어떤 도움을 주시면 감사하겠습니다! 즉,하지 (

답변

2

문제는 이전에 1.9.3로, Exception#message 이상한 일이 생긴다 원인 클래스 Class의 객체, 하지String을 반환하는 것 같다 그것은 예상치 못한 클래스와 예외를 발생시키는 끝 RuntimeError).

이 버그는 this commit로 수정되었으며 1.9.3 changelog에 있습니다.

궁극적으로 raise exception이 아니라 raise exception.message이됩니다.

+0

좋습니다. C 코드를 읽는 것이 더 좋아질 필요가 있습니다. 명확성을 위해 클래스가 반환 한 메시지가 아니라 문자열을 전달해야 할 때 전달 된 객체가 정확히 반환되었습니다. 도와 주셔서 감사합니다! – Chris

+0

'String'을 반환 했어야합니다. 그렇지만 실제로 반환 한 것은 해독하기가 조금 더 어렵습니다. '.class'를 호출하면'Class'가 생성되지만, 더 많은 기이함이있을 수 있습니다. 그것이 C에 있기 때문에 따르기가 더 힘듭니다 (그리고 C 루비는 거대합니다). –