4

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)

誰でも助けることができますか?

4

2 に答える 2

1

これは奇妙です、あなたの例は私にとってはうまくいきます:

→ 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"
于 2012-02-11T00:07:56.787 に答える
0

次のことを試してください。

require_relative 'tree'
于 2013-01-14T12:36:43.393 に答える