12

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

示例:在超类中,我有这个:

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

然后,在它的一个子类中:

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

当调用execute方法时,它没有说任何关于“before”修饰符的内容。

4

1 回答 1

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修饰符的功能,除了更改了父/子关系。

于 2011-02-11T03:38:24.347 回答