У меня возникли проблемы, когда, когда я запускаю это расширение 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);
}