提问人:nyangostar 提问时间:11/16/2023 更新时间:11/20/2023 访问量:50
在 C++ 中嵌入 Ruby 缺少“类”方法
Embedding Ruby in C++ missing "class" method
问:
我想就将 ruby 嵌入到 C++ 中的问题寻求您的帮助。 我正在从旧版本的 ruby 升级到 3.2 版。以前,我可以像往常一样打电话给ruby_init和ruby_init_loadpath,然后事情就会好起来,但现在我需要在打电话给ruby_init_loadpath之前先打电话给ruby_executable_node。
像这样的东西(ruby的参数是任意的):
char* opt[] = { "ruby", "-v", "-eputs 'Starting'" };
int status;
ruby_executable_node(ruby_options(3, opt), &status);
这似乎不是正确的做法,但除非我这样做,否则我所有的 ruby 对象都缺少类方法(错误是未定义的方法“class”)。我浏览了 ruby 的更新日志,但找不到与此更改相关的任何内容。 有谁知道为什么会发生这种情况,或者是否有解决方法?
谢谢
答:
1赞
Max
11/20/2023
#1
根据这个例子,你可以传递参数,让 Ruby 在传递选项时不执行任何代码。听起来这可以解决您的问题。"-e "
评论
0赞
nyangostar
11/21/2023
你好马克斯,非常感谢你的链接。我尝试传递“-e”并且它起作用了(即,我得到与以前相同的结果),但仍然不确定为什么需要调用 ruby_executable_node 和 ruby_options。调用这些时是否进行了一些额外的初始化?我看到ruby_init_stack在ruby_options中调用,但我在ruby_init之前调用它(通过RUBY_INIT_STACK宏)。我在示例中注意到的另一件事是对 ruby_exec_node 的调用,但实际上即使不调用它,我的 ruby 代码也会被执行。
0赞
Max
11/22/2023
@nyangostar这是个好问题,我不知道。我创建了我在回答中链接到的网站,正如你所看到的,如果你只是打电话,它肯定曾经工作过。我为自己记录了一个错误来调查它 github.com/silverhammermba/emberb/issues/27 如果您发现任何问题,请告诉我!ruby_init
0赞
nyangostar
11/22/2023
啊,这是你的向导!非常感谢您的指导!当然,如果我发现任何东西,我会在这里更新。
评论