Article View: pl.comp.lang.perl
Article #52132Re: Wielokrotne dziedziczenie z jawnym wywołaniem konstruktorów klas bazowych z parametrami
From: Jarosław Lubczyński
Date: Thu, 06 Jan 2011 19:12
Date: Thu, 06 Jan 2011 19:12
92 lines
5061 bytes
5061 bytes
W dniu 2011-01-06 17:34, Bartosz Jakubski pisze: > On 2011-01-06, Jarosław Lubczyński<guess@who.com.pl> wrote: >> W dniu 2011-01-06 12:20, Ireneusz Pluta pisze: >>> >>> Ten komunikat to wyjaśnia. Atrybut 'data' zadeklarowałeś jako required >>> w klasach pierwotnych, a nie umieściłeś go w konstrukcji. Dodaj go w >>> My::ClassC->new(). >> >> Ale nie mam innego pomysłu, jak go dodać. Atrybut 'data' jest w *obu* >> klasach bazowych, więc należy go sprefixować nazwą klasy, co, jak mi się >> wydawało, próbowałem zrobić. Wywołanie: > > Skąd ten pomysł z prefiksowaniem? ZTCW nie możesz mieć dwóch atrybutów > o tej samej nazwie i tyle. W zwykłym dziedziczeniu przez błogosławienie hasza owszem, dlatego zainteresowałem się techniką obiektów odwróconych, gdzie takie sztuczki są możliwe :) > Jaką struturę próbujesz modelować? Bo trochę > dziwnie wygląda ten przykład. Nie bardziej naturalna byłaby > jakaś delegacja np.? > >> >> $obj = My::ClassC->new # (*) >> ( >> 'info' => 'help', >> 'data' => 11, >> 'para' => 4342, >> 'parb' => 'ma kota', >> ); >> >> oczywiście ustawia wartość (tu: 11) w *obu* klasach bazowych, a nie o >> to przecież chodzi... > > Nie w obu klasach bazowych, tylko w obiekcie. Tak, 'drobny' brak precyzji z mojej strony. > On ma jeden atrybut (jeśli > dziedziczysz z wielu, to "użył się" z pierwszej bazowej. OK, przyjąłem. Moose nie oferuje hermetyzacji. Będę musiał sobie z tym jakoś poradzić :). >> >> Aha, próba wywołania typu: >> >> $obj = My::ClassC->new >> ( >> 'info' => 'help', >> 'My::ClassA::data' => 11, >> 'My::ClassB::data' => 31, >> 'para' => 4342, >> 'parb' => 'ma kota', >> ); >> >> też nie prowadzi do sukcesu. No i pomysły mi się skończyły... > > Chyba próbujesz zastosować w Moosie jakąś dziwną konwencję z jakiegoś > innego modułu. Proponuję na spokojnie przeczytać sobię dokumentację > Moose - jest naprawdę sympatyczna: Moose::Manual(::*) i Moose::Cookbook(::*) Tak, to dobry pomysł, oddam się lekturze i pewno trochę mi sie rozjaśni, zwłaszcza, że nie terminy mnie nie gonią. > > Z pewnością _jakoś_ da się osiągnąć to co chcesz w Moose (przez ->meta > i Class::MOP naprawdę wiele da się zmienić), ale trudno oprzec się > wrażeniu, że na siłę jakiś problem wpasowałeś w wielokrotne > dziedziczenie i teraz próbujesz się wykopać :-) > > Nie, to po prostu przyzwyczajenie z C++, gdzie biorę dwie klasy z półki, tworzę trzecią poprzez wielokrotne dziedziczenie *nie* *przejmując* *się* nazwami pól w klasach bazowych bo C++ oferuje pełną hermetyzację i mam nową klasę, której instancje mają dokładnie takie cechy jakie potrzebuję - praktycznie bez żadnego wysiłku. To samo (jak zdążyłem się naumieć) można osiągnąć w Perlu w technice InsideOut, niestety oferowane pakiety są dla mnie zdecydowanie za ciężkie. Dlatego ostatecznie chyba użyję Mouse i będę musiał się pogodzić z brakiem hermetyzacji obiektów. Na szczęście kodem Perla zarządzam osobiście :) -- Pozdrawiam Jarek Lubczyński (eljot<NULL>90125 at gmail dot com) Nawiasy trójkątne z zawartością zbędne są There are 10 kinds of people: Those who understand binary and those who don't
Technical Details
Message-ID:
<ig547p$4d8$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<ie9uh2$qfj$1@opal.futuro.pl> <kjzr5dheupb.fsf@ccfs1.fuw.edu.pl> <iedin2$bbc$2@inews.gazeta.pl> <kjzmxo5con2.fsf@ccfs1.fuw.edu.pl> <ifanvr$iut$1@inews.gazeta.pl> <kjzipyf7xpf.fsf@ccfs1.fuw.edu.pl> <ifcg1j$a6r$1@inews.gazeta.pl> <72ddf779-ba30-44e8-bf4d-132def818429@fu15g2000vbb.googlegroups.com> <ifv5fs$4ir$1@opal.futuro.pl> <7af449a1-136b-46b1-a3bf-7fc25fc1b8cd@w18g2000vbe.googlegroups.com> <ig07a6$18l$1@inews.gazeta.pl> <8dc8aba4-2abe-42db-82b5-366ba34a9d8d@l7g2000vbv.googlegroups.com> <ig2mrl$2cl$1@inews.gazeta.pl> <77910e78-c927-43fe-b6c9-feb092225395@d7g2000vbv.googlegroups.com> <ig4jq1$7r2$1@inews.gazeta.pl> <ig4qur$2cs$1@mx1.internetia.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: Jarosław Lubczyński <guess@who.com.pl> Newsgroups: pl.comp.lang.perl Subject: Re: Wielokrotne dziedziczenie z jawnym wywołaniem konstruktorów klas bazowych z parametrami Date: Thu, 06 Jan 2011 20:12:26 +0100 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 93 Message-ID: <ig547p$4d8$1@inews.gazeta.pl> References: <ie9uh2$qfj$1@opal.futuro.pl> <kjzr5dheupb.fsf@ccfs1.fuw.edu.pl> <iedin2$bbc$2@inews.gazeta.pl> <kjzmxo5con2.fsf@ccfs1.fuw.edu.pl> <ifanvr$iut$1@inews.gazeta.pl> <kjzipyf7xpf.fsf@ccfs1.fuw.edu.pl> <ifcg1j$a6r$1@inews.gazeta.pl> <72ddf779-ba30-44e8-bf4d-132def818429@fu15g2000vbb.googlegroups.com> <ifv5fs$4ir$1@opal.futuro.pl> <7af449a1-136b-46b1-a3bf-7fc25fc1b8cd@w18g2000vbe.googlegroups.com> <ig07a6$18l$1@inews.gazeta.pl> <8dc8aba4-2abe-42db-82b5-366ba34a9d8d@l7g2000vbv.googlegroups.com> <ig2mrl$2cl$1@inews.gazeta.pl> <77910e78-c927-43fe-b6c9-feb092225395@d7g2000vbv.googlegroups.com> <ig4jq1$7r2$1@inews.gazeta.pl> <ig4qur$2cs$1@mx1.internetia.pl> NNTP-Posting-Host: apn-95-40-102-76.dynamic.gprs.plus.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1294341178 4520 95.40.102.76 (6 Jan 2011 19:12:58 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Thu, 6 Jan 2011 19:12:58 +0000 (UTC) X-User: eljot_007 In-Reply-To: <ig4qur$2cs$1@mx1.internetia.pl> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit