Ruby里面的C添加到$ LOAD_PATH

时间:2013-11-26 09:25:16

标签: c++ c ruby ruby-rice

有效地我想知道我是否可以纯粹通过使用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,它只是给了我一个节点,然后阻止了主线程,所以我什么也做不了;我用错了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

要访问$LOAD_PATH变量的加载,请使用代码中的rb_gv_get("$LOAD_PATH")

rb_gv_get("$LOAD_PATH")返回一个Ruby数组对象,因此可以使用任何C数组函数,例如rb_ary_unshiftrb_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"));