我提供了一個方法修飾符像這樣一個角色:由於需求在運行時從方法應用角色修改
package MyApp::Role::MenuExtensionRed;
use Moose::Role;
requires 'BuildMenu';
after 'BuildMenu' => sub {...};
其他地方,我需要在運行時應用一些角色,像這樣:
package MyApp::MainMenu
before 'BuildMenu' => sub {
my ($self, $args) = @_;
my $roles = $args->{menu_extensions};
apply_all_roles($self,@$roles);
};
sub BuildMenu {...}
但是,'after'方法修飾符永遠不會被調用。顯然我打破了一些規則,但我真的很想明白爲什麼這不起作用!
它的工作原理是,如果不是在'BuildMenu'之前應用角色,我將它們應用於BUILD方法中。但不幸的是,我的menu_extension角色列表在此時不可用,所以我必須等待。
任何備用解決方案,將不勝感激!
EDIT有趣的是,after 'BuildMenu'
被調用,但僅在隨後調用BuildMenu時調用。所以一個方法的修飾符不能從它自己的修飾符中改變。這是預期的行爲?有沒有辦法在運行時添加到修飾符的「列表」?
只是一個猜測,但它大概檢查在進入子文件之前/之後的包裝。 –