拥有此示例代码 - 扩展Some
包并重新定义func
方法的2个包。
use 5.014;
use warnings;
package Some {
use Moose;
use warnings;
sub func { say 'func from Some'; }
}
package Over {
use Moose;
use warnings;
extends 'Some';
override 'func' => sub { say 'func from Over'; };
}
package Plain {
use Moose;
use warnings;
extends 'Some';
sub func { say 'func from Plain'; };
}
#main
for my $package ( qw(Some Over Plain) ) {
my $instance = $package->new();
$instance->func;
}
运行代码给出:
func from Some
func from Over
func from Plain
e.g。 func
方法在两种情况下都被重新定义,没有任何警告等。
问题:
override
, plain 何时重新定义?答案 0 :(得分:5)
documentation完美地回答了这个问题。
override ($name, &sub)
覆盖方法是一种明确说出的方式"我从我的超类"中覆盖了这个方法。您可以在此方法中调用
super
,它将按预期工作。使用普通方法调用和SUPER::
伪包可以完成同样的事情;这真的是你的选择。