Ruby C 확장 : 표준식이 아닌 것들을 포함하여 모든 예외를 어떻게 잡을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/3216769

문제

루비에서

begin
  # ...
rescue
  # ...
end
.

는 generacodicicetagode의 하위 클래스가 아닌 예외를 잡지 않습니다.C,

rb_rescue(x, Qnil, y, Qnil);

VALUE x(void) { /* ... */ return Qnil; }
VALUE y(void) { /* ... */ return Qnil; }
.

는 똑같은 일을 할 것입니다.Ruby C 확장 (StandardError 대신)에서 rescue Exception => e를 어떻게 할 수 있습니까?

도움이 되었습니까?

해결책

루비는 더 많은 문서가 필요합니다.나는 루비 소스 코드에 들어가야했고, 이것이 내가 발견 한 것입니다 :

VALUE
rb_rescue(VALUE (* b_proc)(ANYARGS), VALUE data1,
      VALUE (* r_proc)(ANYARGS), VALUE data2)
{
    return rb_rescue2(b_proc, data1, r_proc, data2, rb_eStandardError,
              (VALUE)0);
}
.

그래서, 내 질문에 대한 대답 (나는 추측)이 될 것입니다 :

rb_rescue2(x, Qnil, y, Qnil, rb_eException, (VALUE)0);

VALUE x(void) { /* ... */ return Qnil; }
VALUE y(void) { /* ... */ return Qnil; }
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top