【问题标题】:perl: trouble passing array to functionperl:将数组传递给函数时遇到问题
【发布时间】:2013-05-29 00:04:01
【问题描述】:

所以我要做的就是将一个数组传递给 PERL 中的函数(或子例程)

所以@Temp 包含 2 个数组 [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', ...}

为什么会这样?

我怎样才能正确地做到这一点?

【问题讨论】:

  • 这是一个错字,还是你有两个变量名为@temp 和@Temp。因为它们是两个不同的变量。

标签: arrays perl


【解决方案1】:

如果你打开warnings,你会得到如下一个:

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

如果要按值传递引用的数组,则必须取消引用:

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

【讨论】:

  • 谢谢,似乎解决了我遇到的问题。
  • 您能解释一下@{ $Temp[0] } 的含义吗?
  • 严格来说@{ $Temp[0] } 不传递数组:)
  • @686: $Temp[0] 是一个数组引用。要取消引用它,您必须使用取消引用运算符@{ ... }。
  • 好吧,谢谢回复,这是我在 perl =D 中编码的第一件事
【解决方案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]);

【讨论】:

  • 您有两个选择,将array 或list of values 传递给函数。上面的示例传递了一个数组,如您在问题主题中所述。
  • @{ $Temp[0] } 解决了我的问题,$Temp[0] 似乎没有工作
【解决方案3】:

您传递的是引用而不是值。

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

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

简而言之,在传递参数时将 @temp[0] 更改为 $temp[0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 2012-06-17
    • 2018-08-28
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多