gpt4 book ai didi

mruby - 如何在 mruby 中默认引发错误/异常?

转载 作者:行者123 更新时间:2023-12-01 13:25:59 24 4
gpt4 key购买 nike

我开始使用 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()

最佳答案

你可以通过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;
}

关于mruby - 如何在 mruby 中默认引发错误/异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19939521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com