考虑 Moose::Cookbook::Basics::Recipe3 中开发的二叉树
检索所有节点in preorder ,我可以将以下子程序添加到 BinaryTree 包中
sub pre_order {
my ($self,$aref) = @_;
push @$aref, $self->node;
pre_order($self->left,$aref) if $self->has_left;
pre_order($self->right,$aref) if $self->has_right;
}
子必须像这样使用:
my $btree = BinaryTree->new;
#add some nodes
#then later...
my @nodes_in_preorder;
$btree->pre_order(\@nodes_in_preorder);
我将如何更改子例程才能使用如下语法:
my @nodes_in_preorder = $btree->pre_order();
为了能够做类似的事情
for ($btree->pre_order()) { #bla bla }
稍后。
这是有道理的,还是我很迂腐?
最佳答案
怎么样:
sub pre_order {
my $self = shift;
return ($self->node,
$self->has_left ? $self->left->pre_order : (),
$self->has_right ? $self->right->pre_order : ());
}
关于perl - 在 perl 中重写递归函数,以便它可以在列表上下文中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5250365/