|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/25606cfb2e132.html, оценка из 5, голосов 10
|