gpt4 book ai didi

c++ - C 中的 Ruby 添加到 $LOAD_PATH

转载 作者:行者123 更新时间:2023-11-28 07:16:07 25 4
gpt4 key购买 nike

实际上,我想知道我是否可以纯粹通过使用 Ruby 的 C 库附加到 $LOAD_PATH。这样做的原因是我有一个书面扩展(使用 Rice 但这不是非常重要)并且我希望它能够与其他几个在他们自己的目录中自包含。

现在,我已经有了两个我满意的可行解决方案。第一个是我简单地使用 Rice 生成的 Makefile 将共享对象自动安装到一个已经在 $LOAD_PATH 上的标准目录中。 super 简单没有麻烦。另一个是我在运行之前将 $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,它只是给了我一个节点,然后阻塞了主线程,所以我什么也做不了;我用错了吗?

谢谢!

最佳答案

要访问加载 $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"));

关于c++ - C 中的 Ruby 添加到 $LOAD_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com