3

无法弄清楚推送到 Moose 数组的语法(我敢肯定这很明显而且我很愚蠢)。这是这个问题的延续。在我看来,对于我的具体情况,我需要的不仅仅是一个简单的值。尝试使用 Moose 式的方式来实现它(也许这是错误的?)但我显然做得不对。

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(@_)
};
4

1 回答 1

9

你误解了traits => ['Array']它的作用。这允许您设置handles方法。它不允许您push直接调用方法。您需use Moose::Autobox要这样做(并且您不需要 Array 特征)。

或者你可以这样做:

has 'tid_stack' => (
    traits => ['Array'],
    is     => 'rw',
    isa    => 'ArrayRef[Str]',
    default => sub { [] },
    handles => {
      push_tid => 'push',
    },
);

...

    $self->push_tid( get_hrtid( $template ) );
于 2010-08-15T14:41:08.317 回答