我正在使用Moose,需要对项目中的方法调用进行包装。对于我的包装代码来说,最外层的修饰符非常重要。到目前为止我所做的是将我的方法修饰符放在Moose Role中,然后像这样在类的结尾应用该Role:
use Moose::Util;
Moose::Util::apply_all_roles(__PACKAGE__->meta, ('App:Roles::CustomRole'));
__PACKAGE__->meta->make_immutable;
这使我相当确信我的角色修饰符是最后定义的,因此可以正确地使用“before”和“after”的行为。(角色中的“before”和“after”分别被称为“very first”和“very last”)。
我最初认为这已经足够了,但现在我真的需要用“around”以类似的方式包装方法。Moose所依赖的Class::MOP会先应用“around”修饰符,因此它们在“before”之后和“after”之前被调用。
更详细地说,这是我的修饰符当前的调用顺序:
CUSTOM ROLE before
before 2
before 1
CUSTOM ROLE around
around
method
around
CUSTOM ROLE around
after 1
after 2
CUSTOM ROLE AFTER
我真的需要像这样的东西:
CUSTOM ROLE before
CUSTOM ROLE around
before 2
before 1
around
method
around
after 1
after 2
CUSTOM ROLE around
CUSTOM ROLE AFTER
有没有什么办法可以让我的“around”修饰符应用/调用在我想要的地方?我知道我可以做一些符号表操作(就像Class :: MOP已经在做的那样),但我真的不想这样做。
Moose::Util::apply_all_roles
而不是with
? - perigrin