Perl:hash-keys丢失了他们的类信息
发布时间:2020-12-15 23:26:28 所属栏目:大数据 来源:网络整理
导读:我有一个包X.pm与方法data_x(); 比方说,我使用类X的实例作为哈希%的键. 现在看到的钥匙%的元素似乎忘记了他们的祝福: use X;my( $x,$y,%seen );$x = X-new();$x-data_x( 1 );print " x: ",$x,"n";print " x.data: ",$x-data_x(),"n";$seen{ $x } = 1;$y
我有一个包X.pm与方法data_x();
比方说,我使用类X的实例作为哈希%的键. 现在看到的钥匙%的元素似乎忘记了他们的祝福: use X; my( $x,$y,%seen ); $x = X->new(); $x->data_x( 1 ); print " x: ",$x,"n"; print " x.data: ",$x->data_x(),"n"; $seen{ $x } = 1; $y = (keys %seen)[0]; print " y: ","n"; print " y.data: ",$y->data_x(),"n"; 这打印: x: X=HASH(0x228fd48) x.data: 1 y: X=HASH(0x228fd48) Can't locate object method "data_x" via package "X=HASH(0x228fd48)" (perhaps you forgot to load "X=HASH(0x228fd48)"?) at test.pl line 15. $x和$y都指向同一个地址,但显然键没有复制类信息. 解决方法
他们不仅失去了他们的祝福,他们甚至不再是hashrefs.
您只能在Perl中使用字符串作为哈希键. 所有尚未成为字符串的内容都将被制作成字符串.因此,哈希中的键不再是对象,而是字符串’X = HASH(0x228fd48)'(这是打印时带来的祝福hashref).无法从该字符串返回对象(除非您有另一个将这些键映射到原始对象的哈希). 您需要使用唯一标识符作为哈希键.看来你可以使用当前的字符串版本(基本上是一个内存地址)来至少检查对象的身份(该对象在它活着时似乎没有被移动),但我不确定它会有多稳定是(内部对象的一些实现似乎基于这个想法),它并没有给你对象相等性检查. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读