嵌入Ruby,从C调用函数
发布时间:2020-12-17 02:26:56 所属栏目:百科 来源:网络整理
导读:我正在编写一个从c调用 ruby代码的应用程序.我有点困难,想知道是否有人能指出我的仪式方向. 我目前在我的C. #include ruby.hmain(){ ruby_init(); rb_require("myRubyFile"); rb_funcall(rb_module_new(),rb_intern("RubyFunction"),NULL);} 我的ruby文件与
我正在编写一个从c调用
ruby代码的应用程序.我有点困难,想知道是否有人能指出我的仪式方向.
我目前在我的C. #include ruby.h main() { ruby_init(); rb_require("myRubyFile"); rb_funcall(rb_module_new(),rb_intern("RubyFunction"),NULL); } 我的ruby文件与我的c文件位于同一目录中,名为myRubyFile.rb,包含函数RubyFunction()的定义. 这是我实际想要做的事情的减少,只是让其他人更具可读性.我只是需要一些反馈来判断这是否是从我的c文件中调用ruby代码的正确方法. 问候 解决方法
简短回答:
extern VALUE rb_vm_top_self(void); /* Assumes 1.9. Under 1.8,use the global * VALUE ruby_top_self */ ... rb_funcall(rb_vm_top_self(),/* irb> RubyFunction() */ rb_intern("RubyFunction"),/* irb> self.RubyFunction() # same thing */ 0,NULL); 更长的回答: rb_funcall的第一个参数是方法调用的接收者. 假设您在任何显式类或模块上下文之外定义了RubyFunction(),那么它将被添加到每个ruby vm的“顶层”的隐式主对象的本征类中. 在ruby中,此对象可作为顶级self访问: $cat myRubyFile.rb # file: myRubyFile.rb def foo puts "foo" end $irb irb> require "myRubyFile" => true irb> foo foo => nil irb> self.foo() # same thing,more explicit foo => nil irb> self => main 在C 1.9以下,如上所述可以访问. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |