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

Nick Knutov mail на knutov.com
Ср Мар 28 06:33:21 PDT 2012


Почему не работает? Это BEGIN{}, если я правильно помню, не наследуется, 
но прописываем, например, в конструктор, в новом конструкторе вызываем 
конструктор предка и всё должно работать.

Впрочем, наследования у меня тоже нигде нет :)


28.03.2012 18:23, Dmitry Karpich написал:
>
> On Mar 28, 2012, at 2:08 PM, Nick Knutov wrote:
>
>> И Class::Accessor не надо.
>> А вот в отквотированном ниже коде я минусов не вижу.
>>
> наследование. Оно не работает.
>
> Я как-то давненько писал что-то подобное
> http://search.cpan.org/perldoc?Object::Botox
> Но не стоит этим пользоваться.
> Медленно.
>
> Возьмите Moose или *Acc-что-то там.
>
> Митяй.
>
>> 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 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