我目前正在尝试获取类的所有实例,我希望使用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似乎不存在,我如何在can中检索rb_mObjectSpace模块?发布于 2017-04-30 10:57:55
我找到了怎么做的。它使用的是rb_const_get。
下面是代码:
VALUE rb_mObjSpace = rb_const_get(rb_cObject, rb_intern("ObjectSpace"));该模块已经在gc.c中定义,但不是公开的。访问模块的唯一方法似乎是通过rb_const_get (或者修改gc.c并构建ruby,但没有人愿意这样做)。
https://stackoverflow.com/questions/43705163
复制相似问题