运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

使用Ruby C API在模块中定义类

运维开发网 https://www.qedev.com 2020-07-20 06:27 出处:网络 作者:运维开发网整理
我试图用 Ruby C API在模块内定义一个类.但是,我在网上看到的这种方式对我来说似乎并不适用.具体来说,顶层模块已创建,但在模块内找不到类.这是我的C档案: #include <ruby.h> static VALUE mTree; static VALUE cNode; VALUE hello_world(VALUE klass) { return rb_str_new2("h
我试图用 Ruby C API在模块内定义一个类.但是,我在网上看到的这种方式对我来说似乎并不适用.具体来说,顶层模块已创建,但在模块内找不到类.这是我的C档案:

#include <ruby.h>

static VALUE mTree;
static VALUE cNode;

VALUE hello_world(VALUE klass)
{
    return rb_str_new2("hello world");
}

void Init_tree()
{
  mTree = rb_define_module("Tree");
  cNode = rb_define_class_under(mTree, "Node", rb_cObject); 
  rb_define_method(cNode, "hello_world", hello_world, 0);
}

这是我的extconf.rb:

require 'mkmf'
create_makefile('tree')

这是我的测试脚本:

require 'tree'
puts Tree        # => Tree
puts Tree::Node  # => uninitialized constant Tree::Node (NameError)

有人可以帮忙吗?

这很奇怪,你的例子适合我:

→ ruby extconf.rb     
creating Makefile
→ make          
linking shared-object tree.bundle
→ irb
>> $:<<'.'
=> [...]
>> require 'tree'
=> true
>> Tree
=> Tree
>> Tree.class
=> Module
>> Tree::Node.class
=> Class
>> Tree::Node.new.hello_world
=> "hello world"

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消