Thread Can't call method - Wertzuweisung schlägt fehl?
(16 answers)
Opened by Karakash at 2011-03-24 09:51
nun ja, ohne ein bisschen lektüre wirst du ewig rumprobieren.
OOP kann in jeder sprache ein bisschen anders implementiert sein. und da es in perl5 auch nicht von anfang an zur sprache gehörte, gibt es hier noch zusätzliche dinge, die man beachten muss. du hast in deinem code im prinzip klassenvariablen angesprochen. Foo::Bar::baz() ist ein funktionaufruf des packages Foo::Bar. $Foo::Bar::boo ist eine package-variable des packages Foo::Bar. wenn du ein objekt namens $foo ist, ist $foo::bar also mitnichten eine instanzvariable des objektes $foo, sondern eine package-variable des packages foo. um sauber OOP zu programmieren, solltest du für jedes attribut einen accessor anlegen und alle attribute dann nur über diese accessors ansprechen. also $foo->attribute() z.b. dafür kannst du Class::Accessor oder Moose benutzen (welches dir auch automatisch einen konstruktor erstellt). eine methode überschreibt in perl immer die methode der klasse, von der die klasse erbt. wenn man diese aufrufen will, sagt man: $self->SUPER::new, wenn man schon ein objekt in $self hat oder $class->SUPER::new, wenn in $class nur der packagename steht. hier noch was zum lesen: http://p3rl.org/perlboot http://p3rl.org/perltoot wobei zu beachten ist, dass die beispiele dort alle accessors selber schreiben, damit man lernt, wie das geht. Moose und Class::Accessor erledigen das aber für dich. Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |