[Moscow.pm] new Class::($arg)

Andrey Kostenko andrey на kostenko.name
Вт Авг 25 05:52:59 PDT 2009


25.08.09 15:57, Vany Serezhkin написав(ла):
> Привет.
>
> Я так внимательно посмотрел ... и что то мне этот пример не нравится,
> вот идея нравится, а сам пример - странный.
> если у нас возникает желание сделать из my $object =Class->new;  my
> $object=Class->new->get_part; - То что то настолько неправильно в нашей
> разработке ... что пряма ой.
> А вот придумать корректный пример, когда действительно индиректный вызов
> мешает рефакторингу ... у меня не получилось.
> А если нет примеров использования, может и ну его ?
>
> С другой стороны, вопли о том, что эта штука мешает принту.
> Мне всегда не нравилась функция принт, с одной стороны она парсится
> отдельным механизмом.
> Это единственная функция с выделенным под неё парсером. И изза этого
> невозможно переопределить CORE::print.
> Вопрос, принтов в хэндлер конечно больше, но !
> Конфликт случается именно изза такого поведения принта, а не изза
> индиректных вызовов.
> Индиректные вызовы изначально расчитывались на красивое написание
> конструкции new Class.
> Это нигде не мешает.
> И я не понимаю эту бестпрактику по отношению к контруктору.
>
>
> sub serialize {
>      my $obj=shift;
>      warn 'Serializing '.Dumper($obj);
>      return $obj->serialize;
> }
> my $serizlized=serialize $object - Это довольно правильная конструкция,
> которая позволяет мне привнести миксин глобально ко всем классам.
> Надо только понимать, что это для дебажных целей.
> Кстати, пример тоже очень плохой =)
>
>    
>>>> Есть еще другой довод, что типа такой код рефакторить не удобно.
>>>>
>>>> $x = new Class::X;
>>>>
>>>> сложнее превратить в
>>>>
>>>> $x = Class::X->new->xxx->yyy;
>>>>
>>>>          
>>> Мне кажется, здесь как раз более наглядно получается, если добавить скобки:
>>>
>>> $x = (new Class::X)->xxx->yyy.
>>>
>>> Сразу видно, что X нужен лишь временно.
>>>
>>>        
>> Почему временно? Это chained методы, которые делают дело и возвращают $self :)
>>
>>
>>      
>>> --
>>> Andrew Shitov
>>> ______________________________________________________________________
>>> andy на shitov.ru | http://shitov.ru
>>> --
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>>>
>>>
>>>        
>>
>>
>>
>>      
>
>    
Пример:
my $json = Май::Обjект->new->with_utf8;


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