И Class::Accessor не надо.
А вот в отквотированном ниже коде я минусов не вижу.

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

Ответить