我有一个角色和几个混合角色的类。Role 类加载所有实现类,以便任何导入 Blah 的东西都可以使用它们,而无需键入很多“使用”行。
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 本质上是一个抽象基类,除了方法修饰符,这就是为什么我一开始就使用角色 - 但也许类层次结构会更好?提前致谢。