我现在想知道什么是做我需要的更好的模式。我试图将问题减少到最低限度,让我一步一步地解释它。
我有一个界面角色,例如:
{
package Likeable;
use Moose::Role;
requires 'likers';
requires 'do_like';
}
在此之后,我需要 2 个抽象角色来半实现前一个接口(在这种情况下,它们实现了全部):
{
package Likeable::OnSelf;
use Moose::Role;
with 'Likeable';
has 'likers' => ( is => 'rw', isa => 'ArrayRef' );
sub do_like { }
}
{
package Likeable::OnParent;
use Moose::Role;
with 'Likeable';
requires 'parent';
sub likers { shift->parent->likers(@_) }
sub do_like { shift->parent->do_like(@_) }
}
后来我需要这段代码来编译
{
package OBJ::OnSelf;
use Moose;
with 'Likeable::OnSelf';
}
{
package OBJ::OnParent;
use Moose;
with 'Likeable::OnParent';
has 'parent' => ( is => 'rw', isa => 'Obj' );
}
foreach my $obj (OBJ::OnSelf->new, OBJ::OnParent->new(parent => OBJ::OnSelf->new)) {
if ( $obj->does('Likeable') ) {
$obj->do_like
}
}
在我看来,问题在于我正在尝试对 Moose::Role 进行推导,但我不知道如何正确解决问题。
我可以有你的建议吗?