Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     27 Apr 2004  18:55:41
 To : Alex Mikhajlichenko
 Subject : Re: Параметры в контейнер
 -------------------------------------------------------------------------------- 
 
 Alex Mikhajlichenko  @ Tue, 27 Apr 2004 13:31:15 +0000 (UTC):
 
  AM> Есть класс Сундук, он содержит в себе поле типа класса Волк,
  AM> и так далее, а вообще получаем такую систему контейнеров:
 
  AM> Сундук
  AM>     Волк
  AM>        Заяц
  AM>           Утка
  AM>              СмертьКащеева
 
  AM> При вызове конструктора $сундук = Сундук->new(); хотелось бы
  AM> передать некоторые параметры конструкторам вложенных объектов.
  AM> Параметров много, и они могут именоваться одинаково, например хочу
  AM> чтобы в созданном сундуке Заяц.Цвет был белый, Утка.Цвет был
  AM> серый.
 
  AM> Пока не придумал ничего лучшего, как передавать для Сундука
  AM> набор параметров, структурированный по иерархии объектов:
 
  AM> $сундук = Сундук->new({Высота=>10, Ширина=>20, # Это для Сундука
  AM>                        to_Волк=>{Хвостище=>100,
  AM>                                  to_Заяц=>{Цвет=>'белый',
  AM>                                            to_Утка=>{Цвет=>'серый'
  AM>                                                     }
  AM>                                           }
  AM>                                 }
  AM>                        });
 
  AM> Hо как-то странно все это. Есть подозрение, что я в чем-то неправ.
 
 Прав.  Есть два альтернативных варианта, но у каждого свои минусы.  Один
 - делать вложенные объекты до того:
 
 $сундук = Сундук->new(Высота=>10, Ширина=>20,
         Волк=>Волк->new(Хвостище=>100,
                 Заяц=>Заяц->new(Цвет=>'белый',
                         Утка=>Утка->new(Цвет=>'серый'))));
 
 Лисповский такой синтаксис получается.  Чем удобно - можно сгенерировать
 утку заранее.  Минус - вложенные объекты генерируются до того, как мы
 пойдем в конструктор сундука, поэтому оный конструктор не может передать
 параметры их конструкторам.
 
 Второй вариант - генерировать по умолчанию и потом передавать параметры:
 
 $сундук = Сундук->new();
 $сундук->set(Высота, 10);
 $сундук->Волк()->set(Хвостище=>100);
 и т.д.
 
 Минусы - дюже неудобный синтаксис и невозможность передать параметры,
 если эти параметры кушает только конструктор.
 
 В принципе, если помнить, что мы пишем на перле, а не на C++
 каком-нибудь, а стало быть, нам стоит пользоваться языком
 программирования как велел Ларри (laziness, impatience and hubris), у
 нас не должно быть параметров, которые можно установить только в
 конструкторе, так что остается только неудобный синтаксис во втором
 альтернативном варианте.
 
 Я бы скорее пользовался первым альтернативным, но не скажу, что он лучше
 твоего.  Он _мне приятнее_.
 
 -- 
 Artem Chuprina
 RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757
 --- ifmail v.2.15dev5.3
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Параметры в контейнер   Alex Mikhajlichenko   27 Apr 2004 17:31:15 
 Re: Параметры в контейнер   Yury Kopyl   27 Apr 2004 18:08:50 
 Re: Параметры в контейнер   Vargen   27 Apr 2004 18:17:37 
 Re: Параметры в контейнер   Artem Chuprina   27 Apr 2004 18:55:41 
Архивное /ru.perl/25606cfb2e132.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional