我正在使用 Moose,我需要在我的项目中包装方法调用。重要的是我的包装代码是最外层的修饰符。到目前为止,我所做的是将我的方法修饰符放在 Moose 角色中,然后在我的课程结束时应用该角色,如下所示:
use Moose::Util;
Moose::Util::apply_all_roles(__PACKAGE__->meta, ('App:Roles::CustomRole'));
__PACKAGE__->meta->make_immutable;
这使我可以合理地确定我的角色的修饰符是最后定义的,因此为我提供了“之前”和“之后”的正确行为。(角色中的“之前”和“之后”被称为最开始和最末。)
我最初认为这已经足够了,但我现在真的需要用“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
关于如何在我想要的地方应用/调用我的“周围”修饰符的任何想法?我知道我可以做一些符号表黑客攻击(比如 Class::MOP 已经在做),但我真的不想这样做。