簡體   English   中英

C中的Ruby添加到$ LOAD_PATH

[英]Ruby inside C adding to $LOAD_PATH

實際上,我想知道是否可以(僅通過使用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 ,它只是給了我一個節點,然后阻塞了主線程,所以我什么也做不了。 我使用錯了嗎?

謝謝!

要訪問負載$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"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM