🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #52129

Re: Wielokrotne dziedziczenie z jawnym wywołaniem konstruktorów klas bazowych z parametrami

#52129
From: Ireneusz Pluta
Date: Thu, 06 Jan 2011 11:20
81 lines
4048 bytes
On 5 Sty, 22:12, Jarosław Lubczyński <gu...@who.com.pl> wrote:
>
> Spodoba a mi si ta technika, nie powiem :). Moose / Mouse te . Ale
> przyk adu podanego przez kol. Micha a Jankowskiego nie daje si
> bezpo rednio zaadaptowa :
>
> package My::ClassA;
> {
>      use Moose;
>
>      has data => (is => 'rw', isa => 'Int', required => '1');
>      has para => (is => 'rw', isa => 'Int', required => '1');
>
>      no Moose;
>
> }
>
> package My::ClassB;
> {
>      use Moose;
>
>      has data => (is => 'rw', isa => 'Int', required => '1');
>      has parb => (is => 'rw', isa => 'Str', required => '1');
>
>      no Moose;
>
> }
>
> package My::ClassC;
> {
>      use Moose;
>      extends qw( My::ClassA My::ClassB);
>
>      has info => (is => 'rw', isa => 'Str', required => '1');
>
>      no Moose;
>
> }
>
> package main;
>
> $obj = My::ClassC->new # B D!
> (
>      {
>          'info' => 'help',
>          'My::ClassA' => { data => 11},
>          'My::ClassB' => { data => 31},
>          'para' => 4342,
>          'parb' => 'ma kota',
>      }
> );
>
> print $obj->My::ClassA::data(), "\n";
> print $obj->My::ClassB::data(), "\n";
> print $obj->para(), "\n";
> print $obj->parb(), "\n";
> print $obj->info(), "\n";
>
> __END__
>
> Przy wywo aniu My::ClassC->new dostaj b d:
>
> Attribute (data) is required at
> /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP/Class.pm line
> 603
> Class::MOP::Class::_construct_instance('Moose::Meta::Class=HASH(0x9a2347c)',
> 'HASH(0x9a324ec)') called at
> /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP/Class.pm line
> 576

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().

A potem spróbuj w My::ClassA dodać jeszcze "use
MooseX::StrictConstructor" i zobaczysz dlaczego pierwotnego przykładu
nie należało przepisywać zbyt dosłownie - ale prościej - bo to
Moose :-).

Na wiele pytań można też szybko znaleźć odpowiedzi przy pomocy
Data::Dumper, a jeszcze szybciej przy pomocy perl -d.
Technical Details
Message-ID: <77910e78-c927-43fe-b6c9-feb092225395@d7g2000vbv.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border4.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!d7g2000vbv.googlegroups.com!not-for-mail
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>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border4.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!d7g2000vbv.googlegroups.com!not-for-mail
From: Ireneusz Pluta <ipluta@wp.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: Wielokrotne dziedziczenie z jawnym
 wywołaniem konstruktorów klas bazowych z parametrami
Date: Thu, 6 Jan 2011 03:20:03 -0800 (PST)
Organization: http://groups.google.com
Lines: 90
Message-ID: <77910e78-c927-43fe-b6c9-feb092225395@d7g2000vbv.googlegroups.com>
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>
NNTP-Posting-Host: 83.6.197.63
Mime-Version: 1.0
X-Trace: posting.google.com 1294312803 22933 127.0.0.1 (6 Jan 2011 11:20:03 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Thu, 6 Jan 2011 11:20:03 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: d7g2000vbv.googlegroups.com; posting-host=83.6.197.63; posting-account=RfgvhwoAAACdKZ4WKVl5k1NaJOyjOByj
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13,gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit