我可以想到这种方式使用角色而不是子类化:
{
package AbstractRole;
use Moose::Role;
requires 'stuff';
}
{
package Real;
use Moose;
with 'AbstractRole';
}
Run Code Online (Sandbox Code Playgroud)
这将产生编译错误,因为Real没有定义任何东西.
向Real 添加stuff方法现在可以使它工作:
{
package Real;
use Moose;
with 'AbstractRole';
sub stuff { print "Using child function!\n" }
}
Run Code Online (Sandbox Code Playgroud)
您可能还想看看Jesse Luehrs的 MooseX :: ABC.它似乎与这里的一些实现非常相似.从概要:
package Shape;
use Moose;
use MooseX::ABC;
requires 'draw';
package Circle;
use Moose;
extends 'Shape';
sub draw {
# stuff
}
my $shape = Shape->new; # dies
my $circle = Circle->new; # succeeds
package Square;
use Moose;
extends 'Shape'; # dies, since draw is unimplemented
Run Code Online (Sandbox Code Playgroud)
我知道Jesse在白天是一名C++程序员.
| 归档时间: |
|
| 查看次数: |
1254 次 |
| 最近记录: |