gpt4 book ai didi

Perl 困境 - 分配和返回哈希

转载 作者:行者123 更新时间:2023-12-01 22:48:15 29 4
gpt4 key购买 nike

我有一个实例变量属性,它被声明和实例化,如下所示:

 $self->{properties}{$key1} = $value;

我的理解是这将声明属性字段,并将其设置为包含一个键值对的哈希原语。

我正在尝试为属性实例变量编写一个 getter,它将返回哈希:
sub getProperties{
my $self = shift;

my %myhash = $self->{properties};
return %myhash;
}

随后像这样调用getter:
my %properties = $properties->getProperties();

当我尝试编译它时,我得到:
"Odd number of elements in hash assignment at 70..."

line 70 being: my %myhash = $self->{properties};

最佳答案

在这行代码中:

my %myhash = $self->{properties};

%myhash 是一个散列,而 $self->{properties} 是一个散列引用。所以你有效地返回了一个带有一个键/值对的散列,其中键是对散列的引用,值是 undef。

如果您真的想返回一个哈希,请执行以下操作:
my %myhash = %{$self->{properties}};

或者,返回一个哈希引用。这通常比返回散列更可取,因为它不会复制原始散列,因此随着散列变大,内存效率更高。这是它的外观:
sub getProperties {
my $self = shift;
return $self->{properties};
}

然后在您的调用代码中,而不是这个:
my %properties = $properties->getProperties();
$somevalue = $properties{'somekey'};

做这个:
# getProperties returns a reference, so assign to a scalar
# variable ($foo) rather than a hash (%foo)
my $properties = $properties->getProperties();

# Use -> notation to dereference the hash reference
$somevalue = $properties->{'somekey'};

关于Perl 困境 - 分配和返回哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129014/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com