[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