Ruby внутри C добавляет к $ LOAD_PATH

По сути, я хочу знать, могу ли я, просто используя библиотеку C Ruby, добавить к $ LOAD_PATH.
Причина для этого заключается в том, что у меня есть написанное расширение (с использованием Rice, но это не супер важно), и я хотел бы, чтобы оно содержало себя вместе с несколькими другими в их собственном каталоге.

Теперь у меня уже есть два рабочих решения, с которыми я в порядке. Во-первых, я просто использую Makefile, сгенерированный Rice, для автоматической установки общего объекта в стандартный каталог, который уже находится в $ LOAD_PATH. Супер легко без хлопот. Другая причина в том, что я экспортирую $ RUBY_LIB в качестве каталога, который мне нужен, перед запуском, и среда выполнения Ruby воспринимает это как чемпион. Но я хочу знать, могу ли я сделать это только на C — для справки я ищу функциональность, которая имитирует ruby -I./somedir

Прямо сейчас я инициализирую Ruby в C следующим образом, это прекрасно работает с ранее упомянутыми рабочими решениями, но что я хочу, это способ аккуратно добавить каталог в $ LOAD_PATH Руби во время выполнения.

ruby_sysinit(&argc, &argv);
RUBY_INIT_STACK;
ruby_init();
ruby_init_loadpath();
....
rb_load_protect(...)
rb_funcall(...)

Я не мог понять, как работать с ruby_optionsон просто дал мне узел, а затем заблокировал основной поток, поэтому я ничего не мог сделать; я использовал это неправильно?

Спасибо!

0

Решение

Чтобы получить доступ к загрузке $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"));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]