2010-08-15 5 views
3

J'ai du mal à trouver la syntaxe (ce qui est évident et je suis stupide) pour avoir poussé vers un Moose Array. Ceci est une continuation de this question. il me semble que j'ai besoin de plus qu'une simple valeur pour mon cas particulier. Essayer de l'implémenter en utilisant une méthode Moose-ish (peut-être que c'est faux?) Mais je ne le fais évidemment pas bien.accéder à un Moose Array

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(@_) 
}; 

Répondre

9

Vous avez mal compris ce que fait traits => ['Array']. Cela vous permet de configurer les méthodes handles. Il ne vous permet pas d'appeler directement des méthodes comme push. Vous avez besoin de use Moose::Autobox pour cela (et vous n'avez pas besoin du trait Array).

Ou vous pourriez faire:

has 'tid_stack' => (
    traits => ['Array'], 
    is  => 'rw', 
    isa => 'ArrayRef[Str]', 
    default => sub { [] }, 
    handles => { 
     push_tid => 'push', 
    }, 
); 

... 

    $self->push_tid(get_hrtid($template)); 
+0

... ugh essayé ce .... ça me rend dingue ... Je sais que get_hrtid retourne la bonne chose ... mais lorsque je tente de le pousser Comme ça, ça ne marche toujours pas, l'orignal se plaint plus tard d'essayer de fonctionner sur des réseaux vides. – xenoterracide

+0

@xenoterracide: Je ne vois rien de mal avec le code ci-dessus, pouvez-vous donner une description plus détaillée de l'erreur? Quel code essayez-vous actuellement, et quelle est l'erreur que vous obtenez? – phaylon

+0

avec l'aide de debolaz J'ai apparemment compris ce qui n'allait pas avec ce que j'essayais ... apparemment, j'avais besoin de le rendre "paresseux" (en plus de cela) mais pourquoi cela n'a pas encore résolu mon problème. – xenoterracide