perl - 对对象进行排序

标签 perl hash

我有一个对象 ($p),在初始化中我有 $this->{list} = [];

后来,我用另一个类 (q) 的对象填充该数组,并可以在类 [p] 的另一个子例程中以 @{$self{list}} 的形式访问它们。我正在尝试对这个数组进行排序,如

my @slist = sort $self->point_sort, @{$self->{list}};

point_sort 被定义为类 p 中的子例程,我得到

Can't call method "getQval" on an undefined value at p.pm line 64

getQval 是对象 q 中定义的子例程,其实例填充 {list}。我正在尝试做

my $v1 = $a->getQval;
my $v2 = $b->getQval;

在子例程point_sort中。有什么建议么? TIA。

编辑: 将调用更改为

my @slist = sort { $self->point_sort ($a,$b) } @{$self->{list}};

在point_sort中,我现在有了

my ($c, $d) = @_;
my $val1 = $c->getVarVal;

错误:

Can't locate object method "getVarVal" via package "packageP" at ...

我认为这与软件包有关,不确定它是什么。它正在查找包 p,而我希望它查找包 q。

编辑: 我在上面的 $c 上做了一个 print - Perl 认为它是类 p 的对象 - 一个哈希表

最佳答案

您实际上并没有在此处使用 $self->point_sort 作为比较函数。它被立即调用(没有参数,并且在设置$a$b之前,因此出现错误),以及它的返回值(如果到目前为止)将被用作比较器。

最简单的修复方法是显式传递 $a$b:

my @slist = sort { $self->point_sort($a, $b) } @{$self->{list}};

然后将它们作为 point_sort 中的常规参数接收。

关于perl - 对对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28552042/

相关文章:

Python:为什么我可以将可变对象放在字典或集合中?

java - MD5 签署 HttpServletResponse

php - 存储phphash密码的数据类型

perl - 通过Perl中的Way2sms自动发送短信

android - 应用程序可以保密吗?

java - Apache DigestUtils 似乎计算 MD5 部分错误

linux - Perl 以事件线程 : 退出

perl - 如何覆盖 Perl eval block 中的 exit() 调用

perl - 如果我要在 Perl 中使用纯 OO,是否需要 Exporter?

Perl,perl 构造函数中的@array