Thread Jeder kennt Traits (54 answers)
Opened by rosti at 2018-11-06 11:05

renee
 2018-11-08 14:07
#189136 #189136
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
2018-11-07T08:19:36 Muffi
haben zur klassischen Vererbung einen entscheidenden Nachteil.
Sie können inkompatibel zueinander sein.


Ich finde, sie haben einen enormen Vorteil...

Code: (dl )
1
2
3
4
5
6
7
package Foo;

sub test {
print __FILE__;
}

1;


Code: (dl )
1
2
3
4
5
6
7
package Bar;

sub test {
print __FILE__;
}

1;


Code: (dl )
1
2
3
4
5
6
7
8
package MyChild;

use lib '.';
use base ( 'Foo', 'Bar' );

sub new { bless {}, shift }

1;


perl -I. -MMyChild -E 'MyChild->new->test;' gibt Foo.pm aus, wenn es use base ('Bar','Foo'); heißt, dann wird Bar.pm ausgegeben.



Aber:

Code: (dl )
1
2
3
4
5
6
7
8
9
package Foo;

use Moo::Role;

sub test {
print __FILE__;
}

1;


Code: (dl )
1
2
3
4
5
6
7
8
9
package Bar;

use Moo::Role;

sub test {
print __FILE__;
}

1;


Code: (dl )
1
2
3
4
5
6
7
8
package MyChild;

use Moo;

use lib '.';
with 'Bar', 'Foo';

1;


Code: (dl )
1
2
3
4
$ perl -I. -MMyChild -E 'MyChild->new->test;'
Due to a method name conflict between roles 'Bar and Foo', the method 'test' must be implemented by 'MyChild' at /usr/share/perl5/Moo/Role.pm line 280.
Compilation failed in require.
BEGIN failed--compilation aborted.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread Jeder kennt Traits