デザパタ本のvisitorパターンはインターフェースを抽象クラスで実装していたので、Mooseでもできるかなと試してみた。
package Element;
use Moose::Role;
requires 'accept';
package Entry;
use Moose::Role;
extends 'Element';
requires 'getName';
requires 'getSize';
sub add {
print "method add";
}
sub toStoring {
my $self = shift;
return $self->getName . " (" . $self->getSize . ")";
}
Moose::Roleはextendsできない。
Moose::Role does not currently support 'extends' at
/opt/local/lib/perl5/site_perl/5.10.0/Moose/Role.pm line 53
Moose::Role::extends('Element') called at moose_visitor.pl line 12
ドキュメントにも書いてあった。