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

Nick Knutov mail на knutov.com
Ср Мар 28 02:54:42 PDT 2012


Вещи, имеющие синтаксис вида

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