【发布时间】:2017-04-30 09:58:20
【问题描述】:
我目前正在尝试获取一个类的所有实例,我想使用ObjectSpace.each_object 来实现这一目标。
这是我在 C 中的实际代码:
ruby_init();
int ruby_state = 0;
rb_string_eval_protect("def my_func ; ObjectSpace.each_object(Klass) { |x| x.do_something } ; end", &ruby_state);
ruby_cleanup(ruby_state);
但是,我不知道这是否真的是一件好事。我想改用rb_funcall,这可能是一种更清洁的方法。
我的问题是:
- 使用
rb_funcall比使用string_eval更好吗? (我认为是因为解析器) - 由于
rb_mObjectSpace似乎不存在,我如何在 C API 中检索ObjectSpace模块?
【问题讨论】:
标签: c ruby api objectspace funcall