2011-07-04 2 views
0

У меня возникли проблемы, когда, когда я запускаю это расширение C за пределами среды Rails, он работает, но когда я запускаю Rails, он дает мне дамп стека.Есть ли что-то не так, как я ссылаюсь на мои экземпляры в этом расширении C?

Я получаю сообщение об ошибке:

NoMethodError Exception: undefined method `evaluate' for #<String:0x00000103557db0> 

Это предположительно со ссылкой на звонки, которые я делаю в EV :: Счетчики оценки функции, к «оценивать» функции, которые существуют в трех случаях, что я я звоню.

Странно valgrind не дает мне никаких ошибок. Но я думаю, что есть что-то основное, что я могу ошибаться в том, как я ссылаюсь на свои экземпляры?

VALUE rFlushInstance, rPairCounterInstance, rStraightInstance; 


static VALUE 
evaluate(VALUE self, VALUE val, VALUE suit, VALUE index) 
{ 
    rb_funcall(rFlushInstance, rb_intern("evaluate"), 3, val, suit, index); 
    rb_funcall(rStraightInstance, rb_intern("evaluate"), 2, val, index); 
    rb_funcall(rPairCounterInstance, rb_intern("evaluate"), 2, val, index); 

    return Qnil; 
} 

VALUE EV; 

void Init_counters() 
{ 
    EV = rb_define_module("EV"); 
    VALUE Counters = rb_define_class_under(EV, "Counters", rb_cObject); 
    init_pair_counter(); 
    init_straight(); 
    init_flush(); 

    VALUE Flush = rb_const_get(EV, rb_intern("Flush")); 
    VALUE PairCounter = rb_const_get(EV, rb_intern("PairCounter")); 
    VALUE Straight = rb_const_get(EV, rb_intern("Straight")); 
    rFlushInstance = rb_class_new_instance(0, NULL, Flush); 
    rStraightInstance = rb_class_new_instance(0, NULL, Straight); 
    rPairCounterInstance = rb_class_new_instance(0, NULL, PairCounter); 

    rb_define_method(Counters, "initialize", initialize_counters, 2); 
    rb_define_method(Counters, "evaluate", evaluate, 3); 

} 

ответ

0

Что мне нужно сделать, чтобы сохранить экземпляры как переменные экземпляра, например:

VALUE rPairCounterInstance = rb_class_new_instance(0, NULL, PairCounter); 
rb_ivar_set(self, rb_intern("@pair"), rPairCounterInstance); 

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

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