[Moscow.pm] дефолтные методы объекта и AUTOLOAD

Nick Knutov mail на knutov.com
Ср Мар 28 03:08:15 PDT 2012


И Class::Accessor не надо.
А вот в отквотированном ниже коде я минусов не вижу.

btw, мне совершенно не нужен контроль ro/rw и у меня нет сеттеров.

28.03.2012 16:03, Ilya Chesnokov написал:
> Ага, только он в ~6 раз быстрее Class::Accessor - а так не надо, конечно ;)
>
> 28 марта 2012 г. 13:54 пользователь Nick Knutov<mail на knutov.com>  написал:
>> Вещи, имеющие синтаксис вида
>>
>> has 'x' =>  (is =>  'rw', isa =>  'Int');
>> has 'y' =>  (is =>  'rw', isa =>  'Int');
>>
>> не вариант вообще. Это плохо, это многобукв, так писать не надо.
>>
>>
>> 28.03.2012 15:52, Alexandr Alexeev написал:
>>>
>>> https://metacpan.org/module/Mouse умеет это и кое-что другое. Работает
>>> быстро, так что не путать с Moose.
>>>
>>> 28 марта 2012 г. 13:43 пользователь Гнатына Александр<gnatyna на ya.ru
>>> <mailto:gnatyna на ya.ru>>  написал:
>>>
>>>
>>>
>>>     package My::Base;
>>>     sub _prop_simple_call{
>>>         my $self  = shift;
>>>         my $name = shift;
>>>         if(@_){
>>>             $self->{$name} = $_[0];
>>>         }
>>>         return $self->{$name};
>>>     }
>>>     sub _make_simple_props{
>>>         my $class = shift;
>>>         my @names = @{shift||[]};
>>>         for my $name(@names){
>>>             no strict "refs";
>>>             my $func = $class.'::'.$name;
>>>             *$func  = sub {
>>>                 my $self = shift;
>>>                 return $self->_prop_simple_call($name, @_);
>>>             }
>>>         }
>>>     }
>>>
>>>     package My::Some;
>>>     use base My::Base;
>>>
>>>     __PACAKGE__->_make_simple_props([qw(id name title)]);
>>>
>>>     В Срд, 28/03/2012 в 15:21 +0600, Nick Knutov пишет:
>>>      >  Есть ряд объектов, у которых есть заранее известный, но иногда
>>>      >  меняющийся [в процессе разработки] список полей, для которых надо
>>>     писать
>>>      >  геттеры вида
>>>      >
>>>      >  sub id { my $self = shift; return $self->{id}; }
>>>      >
>>>      >  Или с логикой чуть посложнее, но это еще один список полей и
>>>     полностью
>>>      >  одинаковый код, кроме имени поля.
>>>      >
>>>      >  Возникла мысль генерить эти методы из заранее определенного списка
>>> на
>>>      >  этапе, например, загрузки модуля или компиляции кода. perldoc что?
>>>      >
>>>      >  Альтернативный вариант - сделать то же самое через AUTOLOAD, вот
>>>     только
>>>      >  в гугле находятся несколько очень разных примеров, как это
>>>     делается, и в
>>>      >  каждом говорится, что примеров есть разные, но вот именно этот
>>> способ
>>>      >  лучше и избавит от разных проблем и багов. So, как все же это
>>>     надо делать?
>>>      >
>>>      >  --
>>>      >  Best Regards,
>>>      >  Nick Knutov
>>>      >  http://knutov.com
>>>      >  ICQ: 272873706
>>>      >  Voice: +7-904-84-23-130
>>>
>>>
>>>     --
>>>     Moscow.pm mailing list
>>>     moscow-pm на pm.org<mailto:moscow-pm на pm.org>  | http://moscow.pm.org
>>>
>>>
>>>
>>>
>>>
>>> --
>>> С уважением, Александр
>>> Личный блог: http://eax.me/
>>> Мой форум: http://it-talk.org/
>>> Мой Twitter: http://twitter.com/afiskon
>>>
>>>
>>>
>>
>> --
>> Best Regards,
>> Nick Knutov
>> http://knutov.com
>> ICQ: 272873706
>> Voice: +7-904-84-23-130
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
>
>

-- 
Best Regards,
Nick Knutov
http://knutov.com
ICQ: 272873706
Voice: +7-904-84-23-130


Подробная информация о списке рассылки Moscow-pm