2012-02-10 4 views
4

Я пытаюсь определить класс внутри модуля с API Ruby C. Однако, как я видел, что это сделано по всей сети, похоже, не работает для меня. В частности, модуль верхнего уровня создается, но класс не может быть найден внутри модуля. Вот мой C файл:Определение классов в модулях с API Ruby 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) 

Может кто-нибудь помочь?

ответ

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" 
+0

Какая версия Ruby, вы работаете? Я использую ruby ​​1.9.3dev (2011-09-23 версия 33323) [x86_64-darwin11.0.0]. – user2398029

+0

Работал и для меня. Я на Ruby 1.9.2-p0. – Brandan

+0

@louism ruby ​​1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0] –

0

Попробуйте следующее:

require_relative 'tree' 

 Смежные вопросы

  • Нет связанных вопросов^_^