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']います。これにより、メソッドを設定できますhandlespushなどのメソッドを直接呼び出すことはできません。そのために必要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 に答える