Ruby C 확장 : 표준식이 아닌 것들을 포함하여 모든 예외를 어떻게 잡을 수 있습니까?
-
13-09-2020 - |
문제
루비에서
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; }
. 제휴하지 않습니다 StackOverflow