Очень даже работает, это же просто функция.
В Срд, 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<[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
