2
我試圖用Perl和Moose創建抽象方法模式。我不明白的是,如果我覆蓋抽象類中的方法,它最終將被調用。爲什麼會這樣,並且有沒有辦法避免超類被調用?Perl - 使用overriden方法避免super()被稱爲
主要
package main;
use AbstractSort;
use OrderedSort;
# Sub class test
my $ordered = OrderedSort->new(array => [1, -1, 23, 34123, -24324]);
$ordered->sortData();
抽象類
package AbstractSort;
use namespace::autoclean; # Trims EXPORTER
use Moose;
has 'array' => (traits => ['Array'],
is => 'ro',
isa => 'ArrayRef[Int]',
default => sub { [] },
handles => {
get_array => 'get',
count_array => 'count',
});
sub sortData{
my $self = shift;
print "Sorting data..\n";
_sortAlgorithm($self->array);
# ...
}
# Protected method here is the actual algorithm
sub _sortAlgorithm {
die 'You must override _sortAlgorithm() in a subclass';
# but Moose will always call the superclass which then makes it die
}
子類
package OrderedSort;
use namespace::autoclean; # Trims EXPORTER
use Moose;
extends 'AbstractSort';
# Override and mmpl _sortAlgorithm
override _sortAlgorithm => sub {
my $self = shift;
# ....
};
before '_sortAlgorithm' => sub {
my $self = shift;
# ...
return;
};
確定嗎?請顯示[mcve]。如果我將代碼包添加到您的代碼中,它適用於我。我沒有看到它'死亡',並且'before'處理程序首先被調用。 – simbabque
我已經使用測試示例編輯了帖子 – Mat0