У меня есть класс Moose, который предназначен для подкласса, и каждый подкласс должен реализовать метод «выполнить». Однако я хотел бы применить метод метода к методу execute в моем классе, чтобы он применил метод execute во всех подклассах. Но модификаторы метода не сохраняются при переопределении метода. Есть ли способ гарантировать, что все подклассы моего класса будут иметь мой модификатор метода, применяемый к их методам выполнения?В Perl/Moose, как я могу применить модификатор к методу во всех подклассах?
Пример: В суперкласса, у меня есть:
before execute => sub {
print "Before modifier is executing.\n"
}
Затем в подклассе, что:
sub execute {
print "Execute method is running.\n"
}
Когда метод выполнения называется, он ничего не говорит о модификатор «before».
Хм. Я забыл упомянуть, что мой суперкласс действительно наследуется от другого класса, отличного от Moose, который ожидает, что его подклассы объявят метод execute, поэтому augment/inner не будет работать. Но я согласен, что это решение в целом. Что касается моей конкретной проблемы, я узнал, что могу просто поместить мой модификатор в метод, который * вызывает * execute, потому что этот метод никогда не переопределяется и не переопределяется в подклассах. Поэтому я предполагаю, что я приму это. –
@ Ryan Thompson, я не пробовал этого, я думаю, вы могли бы поставить почти пустой класс Moose между родителями и детьми. Затем поместите метод «hobbs» в свой класс адаптера Moose, наследуйте все остальное, и там вы идете. ** Предупреждение: непроверенные, неопытные, плохо продуманные брандмауны неуклюжих людей - используйте с особой осторожностью. ** – daotoad
@ Ryan, но суперкласс * делает * объявляет метод execute, а это * является подклассом класса, который ожидает его подклассы объявляют метод execute, поэтому все это кошерно с дополнением/внутренним. Где в дереве фактически добавлен метод * должен * быть неуместным. – hobbs