[Ruby] Re[2]: [Ruby] Re: [Ruby] определения переменной в C
Kachalov Anton
mouse at linux.ru.net
Tue Nov 5 16:35:04 MSK 2002
Eugene Scripnik пишет:
>Tuesday, November 5, 2002, 1:12:13 PM, you wrote:
>
>
>
>>>void Init_freecraft(void) {
>>> // создаем класс
>>> VALUE cFreeCraft = rb_define_class("FreeCraftClass", rb_cObject);
>>> // либо VALUE cFreeCraft = rb_class_new(rb_cObject);
>>> // приклеиваем к нему новый метод
>>> rb_define_method(cFreeCraft, "video", fc_video, 0);
>>> // создаем экземпляр класса
>>> VALUE vFreeCraft = rb_class_new_instance(0, 0, cFreeCraft);
>>> // создаем глобальную переменную
>>> rb_define_variable("$FreeCraft", &vFreeCraft);
>>> rb_iv_set(vFreeCraft,"video",vVideo);
>>>}
>>>Код не тестировался.
>>>
>>>
>
>AB> Это слишком много. Достаточно определять методы как singleton_method:
>Не вижу существенной разницы в объеме между
>VALUE cFreeCraft = rb_class_new(rb_cObject);
>VALUE vFreeCraft = rb_class_new_instance(0, 0, cFreeCraft);
>rb_define_method(cFreeCraft, "video", fc_video, 0);
>rb_define_variable("$FreeCraft", &vFreeCraft);
>и
>foo = rb_newobj();
>OBJSETUP(foo, rb_cObject, T_CLASS);
>rb_define_singleton_method(foo, "my_method", my_method, 0);
>rb_define_variable("$foo", &foo);
>
>Проблема в общем-то не в этом, не совсем прозрачным будет хранение в
>объекте типа Class (класс - это класс) instance переменных. Да и
>объекты такого типа используются для инициализации объектов. Как на
>счет $foo.new? A $FreeCraft.new? Ну и соответственно $foo.class и
>$FreeCraft.class.
>Почему T_CLASS, а не T_MODULE? Раз уж singleton методы, то модуль
>для этих целей более пригоден.
>Хотя это дело религиозное :)
>
Во, то че доктор прописал ;-)
Rgds,
Anton
--
ALTLinux Team
http://www.altlinux.ru
LRN Team
http://www.lrn.ru
More information about the Ruby
mailing list