1

だから私がしたいのは、配列をPERLの関数(またはサブルーチン)に渡すことだけです

@Temp2つの配列が含まれてい ます[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]);

これは、別のクラス (またはパッケージなど) に含まれている createHand メソッドです。

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;
}

私が抱えている問題は、配列が渡されますが ARRAY(XXXXX)、配列の先頭に含まれていることです。例えば{0 ARRAY(xxxxxx), 0 'xx', 1 'xx', ...}

なぜこれが起こるのですか?

どうすればこれを正しく行うことができますか?

4

3 に答える 3

4

をオンにwarningsすると、次のようになります。

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

参照された配列を値で渡したい場合は、逆参照する必要があります。

@handOne = $cardFactory->createHand( @{ $Temp[0] } );
于 2013-05-28T14:28:55.767 に答える
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;
}

また、@temp[0] は、スカラー (配列参照) が必要な場合の配列スライスであるため、正しい意図を述べた方がよいことに注意してください。

@handOne = $cardFactory->createHand($temp[0]);
于 2013-05-28T14:26:25.847 に答える
1

値の代わりに参照を渡しています。

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

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

一言で言えば、引数を渡すとき@temp[0]の変更$temp[0]

于 2013-05-28T14:26:00.397 に答える