2010-08-15 45 views
3

無法找出推送到駝鹿數組的語法(我確信這很明顯,我很愚蠢)。這是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(@_) 
}; 

回答

9

您誤解了traits => ['Array']的功能。這使您可以設置handles方法。它不允許你直接調用像push這樣的方法。你需要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)); 
+0

唉...想這....它的駕駛我堅果...我知道,get_hrtid返回正確的事情......但是當我試圖把它像這樣它仍然沒有工作,駝鹿後來抱怨試圖在空陣列上操作。 – xenoterracide 2010-08-15 15:32:47

+0

@xenoterracide:我看不出上面的代碼有什麼問題,你能給出更詳細的錯誤描述嗎?你目前正在嘗試什麼代碼,以及你得到的錯誤是什麼? – phaylon 2010-08-15 16:10:45

+0

在debolaz的幫助下,我似乎已經弄清楚了我所嘗試的是什麼問題......顯然我需要將它變成'懶惰'(在此之上),但爲什麼這樣可以解決我尚未確定的問題。 – xenoterracide 2010-08-15 16:59:22