Perl: rekursive Objektinstanziierung mit Moosen
Im Beispielcode unten, ich definiere eine Klasse Person
, die untergeordneten Objekte der gleichen Klasse haben kann.
Wenn ich die printTree
Methode aufrufen, erwarte ich die folgende Ausgabe
Sam Ram Geeta
Was ich stattdessen sehen ist
SamRamRamRamRamRamRamRamRamRamRamR.....
Irgendwelche Hinweise auf das, was ich falsch mache und wie mein Ziel zu erreichen ?
package Person;
use Moose;
has name => (is => 'ro');
my @kids;
sub addChild {
my ($self, $name) = @_;
my $k = Person->new(name => $name);
push @kids, $k;
return $k;
}
sub printTree {
my $self = shift;
print $self->name;
$_->printTree foreach (@kids);
}
no Moose;
package main;
my $s = Person->new(name => "Sam");
my $r = $s->addChild("Ram");
my $g = $s->addChild("Geeta");
$s->printTree;
"printTree" nicht innerhalb von "printTree" aufrufen. Übrigens, sollte '@ kids' nicht auch eine Eigenschaft sein? –
Ihre '@ kids' ist ein Singleton innerhalb der Klasse. Das bedeutet, dass alle Objekte es teilen. Es ist eine schlechte Idee. Es sollte eine Eigenschaft sein. Ich werde später eine Antwort schreiben. – simbabque