доступ к массиву Лосиного
Возникли проблемы с определением синтаксиса (который, я уверен, очевиден, и я глуп) для перехода к массиву лося. Это продолжение этого вопроса . мне кажется, что мне нужно больше, чем просто значение для моего конкретного случая. Пытаясь реализовать его с помощью Лосиного пути (может быть, это неправильно? но я, очевидно, делаю это неправильно.
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 ответ:
Вы неправильно поняли, что делает
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 ) );