我目前正在尝试获取一个类的所有实例,我想用它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
?(我认为是因为解析器) - 由于似乎不存在,如何
ObjectSpace
在 C API 中检索模块?rb_mObjectSpace