[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