доступ к массиву Лосиного


Возникли проблемы с определением синтаксиса (который, я уверен, очевиден, и я глуп) для перехода к массиву лося. Это продолжение этого вопроса . мне кажется, что мне нужно больше, чем просто значение для моего конкретного случая. Пытаясь реализовать его с помощью Лосиного пути (может быть, это неправильно? но я, очевидно, делаю это неправильно.

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   3  

1 ответ:

Вы неправильно поняли, что делает 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 ) );