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<[email protected]> написал: >>> Вещи, имеющие синтаксис вида >>> >>> 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 пользователь Гнатына Александр<[email protected] >>>> <mailto:[email protected]>> написал: >>>> >>>> >>>> >>>> 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 >>>> [email protected]<mailto:[email protected]> | 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 >>> [email protected] | http://moscow.pm.org >> >> >> > > -- > Best Regards, > Nick Knutov > http://knutov.com > ICQ: 272873706 > Voice: +7-904-84-23-130 > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
