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

Alexandr Alexeev afiskon на gmail.com
Ср Мар 28 02:52:15 PDT 2012


https://metacpan.org/module/Mouse умеет это и кое-что другое. Работает
быстро, так что не путать с Moose.

28 марта 2012 г. 13:43 пользователь Гнатына Александр <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 | http://moscow.pm.org
>



-- 
С уважением, Александр
Личный блог: http://eax.me/
Мой форум: http://it-talk.org/
Мой Twitter: http://twitter.com/afiskon
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20120328/15fda7c0/attachment.html>


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