代码之家  ›  专栏  ›  技术社区  ›  Adrian

rubyc扩展:如何捕获所有异常,包括非标准错误?

  •  6
  • Adrian  · 技术社区  · 14 年前

    begin
      # ...
    rescue
      # ...
    end
    

    StandardError . 在C中,

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

    会做同样的事。我该怎么办 rescue Exception => e rescue => e )?

    1 回复  |  直到 13 年前
        1
  •  5
  •   Adrian    14 年前

    Ruby需要更多的文档。我不得不研究ruby源代码,我发现:

    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; }
    
    推荐文章