3

我开始使用 mruby 并发现我的代码中发生错误的困难方式,但没有错误报告。也许我做错了什么。我怎样才能让错误发生时出现?

摘自 C 代码:

mrb = mrb_open();
FILE *f = fopen("example.rb", "r");
mrb_load_file(mrb, f);
fclose(f);
// more C code...

Ruby 代码在没有报告的情况下失败:

# example.rb
def my_method
  call_undefined_method
end
my_method()

从错误中拯救以显示存在错误的 Ruby 代码:

# example.rb
def my_method
  call_undefined_method
rescue => e
  puts "Error: #{e.message}"
end
my_method()
4

1 回答 1

5

您可以通过以下方式获得例外mrb->exc

#include <mruby.h>
#include <mruby/variable.h>
#include <mruby/string.h>
#include <stdio.h>

int
main(int argc, char* argv[]) {
  mrb_state* mrb = mrb_open();
  FILE *f = fopen("example.rb", "r");
  mrb_value obj = mrb_load_file(mrb, f);
  fclose(f);

  if (mrb->exc) {
    // Error
    obj = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "inspect", 0);
    fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stdout);
    putc('\n', stdout);
  } else {
    obj = mrb_funcall(mrb, obj, "inspect", 0);
    fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stdout);
    putc('\n', stdout);
  }

  mrb_close(mrb);
  return 0;
}
于 2014-02-18T04:27:12.853 回答