我正在使用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