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

Гнатына Гнатына
Ср Мар 28 07:45:59 PDT 2012


Очень даже работает, это же просто функция.

В Срд, 28/03/2012 в 16:23 +0400, 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
> 




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