Подтвердить что ты не робот

В Perl/Moose, как я могу применить модификатор к методу во всех подклассах?

У меня есть класс Moose, который предназначен для подкласса, и каждый подкласс должен реализовать метод "выполнить". Однако я хотел бы применить метод метода к методу execute в моем классе, чтобы он применил метод execute во всех подклассах. Но модификаторы метода не сохраняются при переопределении метода. Есть ли способ гарантировать, что все подклассы моего класса будут иметь мой модификатор метода, применяемый к их методам выполнения?

Пример: в суперклассе у меня есть это:

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

Тогда в подклассе этого:

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

Когда вызывается метод execute, он ничего не говорит о модификаторе "before".

4b9b3361

Ответ 1

Это то, что сделано для модификатора метода augment. Вы можете поместить это в свой суперкласс:

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

А затем вместо того, чтобы позволить вашим подклассам напрямую переопределять execute, у вас есть они augment it:

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

В основном это дает вам функциональность, которая похожа на модификатор around, за исключением изменений родительского/дочернего.