【发布时间】:2011-07-01 18:13:21
【问题描述】:
我正在使用 Perl 创建一个 Graph 类,我希望每个 Graph 都包含节点。每个节点都有一些属性,并且(目前)还有一个数组,其中包含对它所连接的每个其他节点的引用。到目前为止,我有一个节点的定义:
使用严格; 包节点;
sub new{
my $class = shift;
my @array = ();
my $array_r = \@array;
my $self = {
code => undef,
name => undef,
country => undef,
continent => undef,
timezone => undef,
coordinates => undef
population => undef,
region => undef,
arrayRef => $array_r,
@_,
}; 祝福 $self, $class; 返回 $self; } 然而,在我的主脚本中调用以下函数时:
sub getSetArray{
my $self = shift;
my $param = shift;
my $temp = $self->{arrayRef};
push(@{$temp}, $param) if defined $param;
return $self->{arrayRef};
}
并尝试遍历节点的数组(其中将包含更多与其连接的节点):
my $firstnode = Node->new(); # Node constructor should have @array of
my $secondnode = Node->new();
$firstnode->getSetCode("test");
print "The current code is ", $firstnode->getSetCode(), "\n";
my $array_r = $firstnode->getSetArray($secondnode);
$array_r = $firstnode->getSetArray($firstnode);
foreach my $obj (@{$array_r}){
print $obj;
}
这将打印出 Node=HASH(0x10092bb00)Node=HASH(0x100907bd8)。这让我相信我正在处理一个包含 2 个节点的数组(这就是我想要的)。但是在尝试调用这个 $obj 的任何方法时,我被告知我
不能在没有包或对象引用的情况下调用方法“getSetNode”。
我之前在这些节点上调用 new 时已经祝福了这两个对象。所以我不确定为什么它们不被识别为节点,我不能调用它们的方法......
编辑-
foreach my $obj (@{$array_r}){
print $obj->getSetCode();
}
getSetCode() 在哪里
sub getSetCode{
my $self = shift;
my $param = shift;
$self->{code} = $param if defined $param;
return $self->{code};
}
【问题讨论】:
标签: arrays perl oop object hash