[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