0
と再帰的オブジェクトのインスタンス化、私は同じクラスの子オブジェクトを持つことができ、クラスPerson
を定義しています。
私はprintTree
メソッドを呼び出すと、私は私が代わりに見る何を次のように出力
Sam Ram Geeta
を期待していますが
SamRamRamRamRamRamRamRamRamRamRamR.....
私が間違っているとどのように私の目標を達成するためにしています何上の任意のヒントです?問題は、例えば、@Person::kids
は、いずれかのインスタンスに属していない、とあなたが効果的にあなたがそれ属性にする必要があり
@Person::kids = ($r, $g);
$s->printTree() loops through @Person::kids, calls
$r->printTree() loops through @Person::kids, calls
$r->printTree() loops through @Person::kids, calls
$r->printTree() loops through @Person::kids, calls
...
で終わるということです
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'の中で' printTree'を呼び出さないでください。 Btw、 '@子供たちはまた財産になるべきではない? –
あなたの '@子供たち 'は、クラス内のシングルトンです。つまり、すべてのオブジェクトがそれを共有します。それは悪い考えです。それはプロパティでなければなりません。私は後で答えを書くだろう。 – simbabque