在Perl / Moose中,如何将修改器应用于所有子类中的方法?

时间:2011-02-11 02:56:17

标签: perl inheritance methods moose method-modifier

我有一个Moose类,它打算被子类化,每个子类都必须实现一个“execute”方法。但是,我想将一个方法修饰符应用于我的类中的execute方法,以便它适用于所有子类中的execute方法。但是当方法被覆盖时,方法修饰符不会被保留。有没有办法确保我的类的所有子类都将我的方法修饰符应用于它们的执行方法?

示例:在超类中,我有:

before execute => sub {
    print "Before modifier is executing.\n"
}

然后,在那个的子类中:

sub execute {
    print "Execute method is running.\n"
}

当调用execute方法时,它没有说明“before”修饰符。

1 个答案:

答案 0 :(得分:9)

这就是augment方法修饰符的用途。你可以把它放在你的超类中:

sub execute {
  print "This runs before the subclass code";
  inner();
  print "This runs after the subclass code";
}

然后,不要让您的子类直接覆盖execute,而是让它们augment

augment 'execute' => sub {
  print "This is the subclass method";
};

基本上,它为您提供了与around修饰符一样的功能,但父/子关系发生了变化。