无法确定推送到Moose数组的语法(我肯定很明显,我很愚蠢)。这是this question的延续。在我看来,对于我的具体情况,我需要的不仅仅是一个简单的值。试图用Moose-ish的方式来实现它(也许这是错的?)但我显然做得不对。
use Moose::Role;
has 'tid_stack' => (
traits => ['Array'],
is => 'rw',
isa => 'ArrayRef[Str]',
default => sub { [] },
);
around 'process' => sub {
my $orig = shift;
my $self = shift;
my ( $template ) = @_;
$self->tid_stack->push( get_hrtid( $template ) );
$self->$orig(@_)
};
答案 0 :(得分:9)
你误解了traits => ['Array']
的作用。这允许您设置handles
方法。它不允许您直接调用push
之类的方法。你需要use Moose::Autobox
(并且你不需要数组特征)。
或者你可以这样做:
has 'tid_stack' => (
traits => ['Array'],
is => 'rw',
isa => 'ArrayRef[Str]',
default => sub { [] },
handles => {
push_tid => 'push',
},
);
...
$self->push_tid( get_hrtid( $template ) );