我有一个对象 ($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/