Может и работает, но сложновато для восприятия. Я бы все таки взял Mouse, пусть он и немного избыточен для вашего случая и придется написать десяток лишних байт. K.I.S.S.
28 марта 2012 г. 17:33 пользователь Nick Knutov <[email protected]> написал: > Почему не работает? Это BEGIN{}, если я правильно помню, не наследуется, > но прописываем, например, в конструктор, в новом конструкторе вызываем > конструктор предка и всё должно работать. > > Впрочем, наследования у меня тоже нигде нет :) > > > 28.03.2012 18:23, Dmitry Karpich написал: > > >> On Mar 28, 2012, at 2:08 PM, Nick Knutov wrote: >> >> И Class::Accessor не надо. >>> А вот в отквотированном ниже коде я минусов не вижу. >>> >>> наследование. Оно не работает. >> >> Я как-то давненько писал что-то подобное >> http://search.cpan.org/**perldoc?Object::Botox<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<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:moscow**[email protected] <[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 >>> >> >> > -- > 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 > -- С уважением, Александр Личный блог: http://eax.me/ Мой форум: http://it-talk.org/ Мой Twitter: http://twitter.com/afiskon
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
