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

Eugene Scripnik Eugene.Scripnik at itgrp.net
Tue Nov 5 15:31:11 MSK 2002


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 методы, то модуль
для этих целей более пригоден.
Хотя это дело религиозное :)

-- 
Best regards,
 Eugene [team Enticla] [IT Group]    mailto:Eugene.Scripnik at itgrp.net




More information about the Ruby mailing list