访问Moose数组

xen*_*ide 3 perl moose

无法确定推送到Moose数组的语法(我确信这很明显而且我很愚蠢).这是这个问题的延续.在我看来,对于我的具体情况,我需要的不仅仅是一个简单的值.试图用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(@_)
};
Run Code Online (Sandbox Code Playgroud)

cjm*_*cjm 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 ) );
Run Code Online (Sandbox Code Playgroud)