我正在使用Moose,我需要在我的项目中包装方法调用。重要的是我的包装代码是最外面的修饰符。Perl Moose方法修饰符:在'之前'和'之后'调用'around'
use Moose::Util;
Moose::Util::apply_all_roles(__PACKAGE__->meta, ('App:Roles::CustomRole'));
__PACKAGE__->meta->make_immutable;
这使我有理由相信我的我的角色的修饰符:我到目前为止所做的就是把我的方法修饰符在穆斯的角色,然后在我的课像这样结束时应用该角色最后定义,因此给我“之前”和“之后”的正确行为。 (角色中的“之前”和“之后”被称为非常先和非常后)。
我原本以为这样就足够了,但我现在真的需要用类似的方法来包装方法。 Class :: MOP是Moose的基础,它首先应用“around”修饰符,因此它们在“之前”之前和之后“之后”被调用。
更多的细节,这里是我的修饰符的当前调用顺序:
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已经在做的那样),但是我真的不想。
我同意以下的Ether的问题,为什么你使用'Moose :: Util :: apply_all_roles'而不是'with'? – perigrin 2009-11-09 20:40:12
我希望我的角色中的“之前”和“之后”修饰符与其他可能存在于该类中的修饰符相比,首先运行或最后运行。稍后应用角色定义修饰符,然后修饰符会先运行(用于之前)和最后(用于之后)。 – 2009-11-09 21:57:39
@perigrin我终于明白了你和Ether的问题。我不需要像我想象的那样将apply_all_roles应用于角色。对于Moose,我还是一个新手,并且想到了需要“手动”应用这个角色的想法。我真正需要做的只是在文件末尾(在其他修饰符之后)使用“with”,而不是开头。 – 2009-11-10 15:40:22