有效地我想知道我是否可以纯粹通过使用Ruby的C库附加到$ LOAD_PATH。 这样做的原因是我有一个书面扩展(使用Rice,但这不是非常重要),我希望它可以自己包含在他们自己目录中的其他几个。
现在,我已经有两个工作解决方案,我很好。第一个是我只使用Rice生成的Makefile将共享对象自动安装到已经在$ LOAD_PATH上的标准目录中。超级轻松没有麻烦。另一个是我在运行之前将$ RUBY_LIB导出为我想要的目录,而Ruby运行时就像冠军一样。但我想知道的是,如果我只能在C中做到 - 作为参考,我正在寻找模仿ruby -I./somedir
的功能
现在我用以下方式在C语言中初始化Ruby,这对前面提到的工作解决方案很好,但我想要的是一种在运行时干净地将目录添加到Ruby的$ LOAD_PATH的方法。
ruby_sysinit(&argc, &argv);
RUBY_INIT_STACK;
ruby_init();
ruby_init_loadpath();
....
rb_load_protect(...)
rb_funcall(...)
我无法弄清楚如何使用ruby_options
,它只是给了我一个节点,然后阻止了主线程,所以我什么也做不了;我用错了吗?
谢谢!
答案 0 :(得分:1)
要访问$LOAD_PATH
变量的加载,请使用代码中的rb_gv_get("$LOAD_PATH")
。
rb_gv_get("$LOAD_PATH")
返回一个Ruby数组对象,因此可以使用任何C数组函数,例如rb_ary_unshift
,rb_ary_push
等。
例如:
VALUE load_path = rb_gv_get("$LOAD_PATH");
/* add a directory to Ruby's $LOAD_PATH */
rb_ary_push(load_path, rb_str_new2("any expanded directory"));