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

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

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

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

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

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

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

1 Ответ

9 голосов
/ 11 февраля 2011

Это то, для чего создан модификатор метода 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, за исключением того, что изменились отношения родитель / потомок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...