[Ruby] определения переменной в C

Kachalov Anton mouse at linux.ru.net
Tue Nov 5 12:40:54 MSK 2002


Hi 2 all!
Пишу модуль для Ruby на Си и никак не могу побороть одну вещь.Мне нужно 
создать класс,который изначально не имеет методов и переменных.Когда 
создается класс ruby в Cи, то обычно юзаются ф-ции: Data_Make_Struct и 
Data_Wrap_Struct, но им нужно передавать какой-то тип:
obj = Data_Make_Struct(klass, struct st,0, free_p, p); // вместо struct 
st можно поставить и char или еще че-нить.Но мне нужно создать класс без 
всякой внутренних данных, т.е. без 'struct st' и че-нить подобного.
Плюс ко всему у меня этот класс бужет иметь всего один экземпляр.Мне 
Александр Боковой предлагал определить сразу переменную и доопределять 
методы:

static VALUE fc_video(obj)
{
    return rb_iv_get(obj,"video");
}

void Init_freecraft(void)
{
VALUE vFreeCraft = rb_newobj();
VALUE vVideo = rb_newobj();
OBJSETUP(vFreeCraft,rb_cClass,0); // или OBJSETUP(vFreeCraft,rb_cObject, 
T_CLASS);
OBJSETUP(vVideo,rb_cClass,0); // или flag = T_CLASS
rb_define_variable("$FreeCraft", &vFreeCraft);
rb_iv_set(vFreeCraft,"video",vVideo);
rb_define_method(vFreeCraft, "video", fc_video, 0); // тут-то мы падает
в корку
}

падение происходит на ф-ии st_insert() в rb_add_method(),вызываемый из 
rb_define_method() из-за того,что RCLASS(vFreeCraft)->m_tbl равен нулю.

Как это можно ещё сделать?

Rgds,
Anton

-- 
ALTLinux Team
http://www.altlinux.ru
LRN Team
http://www.lrn.ru




More information about the Ruby mailing list