2011-04-28 17 views
7

यह एक बुनियादी सवाल है, मुझे डर है। निम्नलिखित कोड पर एक नज़र डालें। मैं जानना चाहता हूं कि slices विशेषता को इस तरह से घोषित करने का कोई तरीका है कि get_slices और add_slice के बॉयलरप्लेट से बचने के लिए।सरणी विशेषताओं के लिए सुविधा कार्यों को जोड़ने के लिए मूस का उपयोग कैसे करें?

package Gurke; 
use Moose; 

has slices => is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] }; 

sub get_slices { return @{ $_[0]->slices } } 

sub add_slice { 
    my($self, $slice) = @_; 
    push @{ $self->slices }, $slice; 
    return; 
} 

no Moose; 
__PACKAGE__->meta->make_immutable; 

package main; # now a small test for the above package 
use strict; 
use warnings; 
use Test::More; 
my $gu = Gurke->new; 
$gu->add_slice('eins'); 
$gu->add_slice('zwei'); 
$gu->add_slice('drei'); 
my @sl = $gu->get_slices; 
is shift @sl, 'eins'; 
is shift @sl, 'zwei'; 
is shift @sl, 'drei'; 
done_testing; 

धन्यवाद!

+0

मैं कल्पना करने के लिए ककड़ी की तरह आप में कुछ की स्लाइस रख सकते हैं कि लग रहा है क्या कोशिश कर रहा हूँ ...: डी – simbabque

उत्तर

10

मैं एक मूस शुरुआत कर रहा हूँ, लेकिन मैं आपको इस की जरूरत है:

has slices => 
    is => 'rw', 
    isa => 'ArrayRef[Str]', 
    default => sub { [] }, 
    traits => ['Array'], 
    handles => { 
     add_slice => 'push', 
     get_slices => 'elements', 
    }, 
; 
+0

धन्यवाद प्रिय साथी मूस शुरुआती। यह काम करता है, और वही है जो मैं चाहता था। मैंने दोनों 'लक्षण' और 'हैंडल' की कोशिश की थी लेकिन यह देखने में असफल रहा कि उन्हें संयुक्त किया जाना चाहिए। - और अगर आपको पता चल जाए कि मूस को एक अव्यवस्थित विशेषता पारित करने के लिए कैसे मरना है, तो मैं भी आभारी हूं। :-) [मूस कन्स्ट्रक्टर को एक अविकसित गुणों को पारित करने के लिए कैसे मरना है?] (Http://stackoverflow.com/questions/5818948) – Lumi

संबंधित मुद्दे