[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