我有一个角色和几个混入该角色的类。角色类会加载所有实现类,以便引用Blah的任何代码都无需输入大量的'use'语句。
package Blah;
use Moose::Role;
use Blah::A;
use Blah::B;
(etc...)
requires '...';
requires 'foo';
around 'foo' => sub { ... }
一个典型的Blah子类:
package Blah::A;
use Moose;
with 'Blah';
sub foo { ... }
__PACKAGE__->meta->make_immutable;
由于每个子类'foo'方法都以相同的代码位开始,该角色还通过方法修饰符实现了这些功能。
问题在于:Moose不会将方法修饰符应用于任何Blah::*类。即使我删除这些类的make_immutable调用,情况仍然如此。我认为角色应用完全是在运行时完成的,因此即使Blah::*类在Blah之前加载,修改器也应该被应用?
我正在寻找解决方法或替代方法。目前,除了方法修饰符之外,Blah本质上是一个抽象基类,这就是我使用角色的原因 - 但是也许类层次结构会更好?提前感谢您的帮助。