访问Moose数组

时间:2010-08-15 13:34:12

标签: perl moose

无法确定推送到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(@_)
};

1 个答案:

答案 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 ) );