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

Alexandr Alexeev afiskon на gmail.com
Ср Мар 28 06:44:31 PDT 2012


Может и работает, но сложновато для восприятия. Я бы все таки взял Mouse,
пусть он и немного избыточен для вашего случая и придется написать десяток
лишних байт. K.I.S.S.

28 марта 2012 г. 17:33 пользователь Nick Knutov <mail на knutov.com> написал:

> Почему не работает? Это 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<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<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 <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
>>>
>>
>>
> --
> 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
>



-- 
С уважением, Александр
Личный блог: http://eax.me/
Мой форум: http://it-talk.org/
Мой Twitter: http://twitter.com/afiskon
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20120328/38f80bd9/attachment-0001.html>


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