2013-05-28 4 views
1

Tout ce que je veux faire est de passer un un tableau à une fonction (ou sous-programme) dans PERLperl: difficulté tableau passer à la fonction

Alors @Temp contient 2 tableaux [0] = {xx,xx,xx,xx,xx} [1] = {xx,xx,xx,xx,xx}

#returns array containing two arrays 

my @temp = $lineParser->parseLine($_); 

@handOne = $cardFactory->createHand(@Temp[0]); 
@handTwo = $cardFactory->createHand(@Temp[1]); 

C'est la méthode de createHand wich est contenu dans une classe individuelle (ou paquet ou autre chose)

sub createHand 
{ 
    my $self = shift; 
    my @temp = @_; 
    my @arrayOfCards; 
    foreach(@temp) 
    { 
     my $value = substr($_,0,1); 
     my $color = substr($_,1,1); 

     push(@arrayOfCards,new Card($value,$color)); 
    } 

    return @arrayOfCards; 
} 

le problème i ai est que le réseau reçoit p assed mais contient ARRAY(XXXXX) au début du tableau. E.g. {0 ARRAY(xxxxxx), 0 'xx', 1 'xx', ...}

Pourquoi cela se produit-il?

Comment puis-je gérer correctement?

+0

Est-ce une faute de frappe, ou si vous avez deux variables nommé '@ temp' et' @ Temp' . Parce qu'ils sont deux variables différentes. – TLP

Répondre

4

Si vous activez warnings, vous obtiendrez la suivante:

Scalar value @Temp[0] better written as $Temp[0] 

Si vous voulez passer le tableau référencé par valeur, vous devez déréférencer:

@handOne = $cardFactory->createHand(@{ $Temp[0] }); 
+0

Merci, semblait résoudre le problème que j'avais. – BuildingJarl

+0

Vous seriez en mesure d'expliquer ce que signifie @ {$ Temp [0]}? – BuildingJarl

+0

Strictement parlant '@ {$ Temp [0]}' ne passe pas un tableau :) –

1

Vous passez une référence au lieu d'une valeur.

my @temp = $lineParser->parseLine($_); 

@handOne = $cardFactory->createHand($Temp[0]); 
@handTwo = $cardFactory->createHand($Temp[1]); 

donc un changement mot @temp[0]-$temp[0] en passant l'argument

+0

Pas de srry mais ce n'est pas correct – BuildingJarl

2
sub createHand 
{ 
    my $self = shift; 
    my ($temp) = @_; 
    my @arrayOfCards; 
    foreach(@$temp) 
    { 
     my $value = substr($_,0,1); 
     my $color = substr($_,1,1); 

     push(@arrayOfCards,new Card($value,$color)); 
    } 

    return @arrayOfCards; 
} 

Veuillez également prendre note que @temp [0] est tranche de tableau dans le cas où scalaire (ref tableau) est recherché, alors il est préférable de dire bonne intention:

@handOne = $cardFactory->createHand($temp[0]); 
+0

Pas de srry mais ce n'est pas correct – BuildingJarl

+0

Vous avez deux options, en passant un 'array' ou' list of values' pour fonctionner. Ci-dessus exemple passe un tableau comme vous l'avez déclaré dans le sujet de la question. –

+0

@ {$ Temp [0]} a résolu mon problème et $ Temp [0] ne semble pas fonctionner – BuildingJarl

Questions connexes