gpt4 book ai didi

perl - 对象作为哈希键

转载 作者:行者123 更新时间:2023-12-04 00:29:25 27 4
gpt4 key购买 nike

是否可以将对象用作哈希键?

例如,以下代码允许我使用 MyClass 的实例作为键,但是当我遍历键并尝试调用 get_value方法,我得到错误:

无法通过包“MyClass=HASH(0x12a4040)”定位对象方法“get_value”(也许您忘记加载“MyClass=HASH(0x12a4040)”?)

package MyClass;
use strict;

sub new
{
my $class = shift;
my $self = {
_value => shift
};
bless $self, $class;
return $self;
}

sub get_value {
my($self) = @_;
return $self->{_value};
}

my %hash = ();
%hash->{new MyClass(1)} = 0;
%hash->{new MyClass(2)} = 1;

for my $key (keys %hash)
{
print $key->get_value;
}

最佳答案

默认情况下,Perl 中的所有哈希键都是字符串,所以代码中发生的事情(也有其他问题)是将对象转换为字符串并存储字符串。

一般来说,如果你想使用一个对象作为键,最简单的方法是使用两个数据结构,一个保存你的对象(数组),另一个将对象映射到某些值(哈希) .也可以创建一个支持对象作为键的绑定(bind)哈希,但一般来说,绑定(bind)哈希比简单地使用两个数据结构要慢。

标准模块Tie::RefHash提供了一种将对象(和其他引用)用作散列键的机制(当您取回它们时可以正常工作)。

use Tie::RefHash;
tie my %hash, 'Tie::RefHash';

$hash{MyClass->new(1)} = 0; # never use the indirect object syntax
....

关于perl - 对象作为哈希键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3479667/

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