次のようなメソッド修飾子を提供する役割があります。
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 ロールのリストはその時点では利用できないため、待つ必要があります。
代替ソリューションをいただければ幸いです。
編集興味深いことに、after 'BuildMenu'
IS が呼び出されますが、BuildMenu への後続の呼び出しでのみです。したがって、メソッドの修飾子は、それ自体の別の修飾子内から変更することはできません。これは予想される動作ですか?実行時に修飾子の「リスト」に追加する方法はありますか?