オブジェクトのソートのためにObjectで(class)メソッドを使用しようとしています。Perlのソートの単体テスト
package Something;
use strict;
use warnings;
use Data::Dumper;
sub new {
my ($class, $date) = @_;
my $self = bless{}, $class;
$self->{date} = $date;
return $self;
}
sub _sort($$) {
print STDERR Dumper($_[0], $_[1]);
$_[0]->{date} cmp $_[1]->{date};
}
package SomethingTest;
use base 'Test::Class';
use Test::More;
__PACKAGE__->runtests() unless caller;
sub sorting : Test {
my $jan = Something->new("2016-01-01");
my $feb = Something->new("2016-02-01");
my $mar = Something->new("2016-03-01");
is_deeply(
sort Something::_sort [$feb, $mar, $jan],
[$jan, $feb, $mar]);
}
私は_sort
ため、したがって、プロトタイプ、perldoc -f sort
にこのスニペットを見てきました。
# using a prototype allows you to use any comparison subroutine
# as a sort subroutine (including other package's subroutines)
package other;
sub backwards ($$) { $_[1] cmp $_[0]; } # $a and $b are
# not set here
package main;
@new = sort other::backwards @old;
はしかし、ダンプの引数は奇妙に見える:
$VAR1 = [
bless({
'date' => '2016-02-01'
}, 'Something'),
bless({
'date' => '2016-03-01'
}, 'Something'),
bless({
'date' => '2016-01-01'
}, 'Something')
];
$VAR2 = [
$VAR1->[2],
$VAR1->[0],
$VAR1->[1]
];
とテストが
# Failed test 'sorting died (Not a HASH reference at sort.t line 16.)'
# at sort.t line 25.
で失敗が、この私のテスト・セットアップですか私は、同じオブジェクトを持つことはできませんこれらの配列? 他に何が欠けていますか?
ありがとう、私は本当に間違った場所を見ていました。ソートプロトタイプでは2つの引数しか指定されていないので(コードは3)、is_deeply([sort Something :: _ sort $ feb、$ mar、$ jan]、[$ jan、$ feb、 $ mar]); 'は動作します。 – Robert