【问题标题】:Perl: function returns reference or copy?Perl:函数返回引用还是副本?
【发布时间】:2012-10-03 11:04:30
【问题描述】:

我是 perl 的新手。所以这个问题听起来有点幼稚。

我有以下两个功能

#This function will return the reference of the array
sub getFruits1
{
    my @fruits = ('apple', 'orange', 'grape');
    return \@fruits;
}

但是在以下情况下呢?

#How it returns?
sub getFruits2
{
    my @fruits = ('apple', 'orange', 'grape');
    return @fruits;
}

getFruits2 会返回一个引用并创建该数组的新副本吗?

【问题讨论】:

    标签: perl function return-type


    【解决方案1】:

    getFruits1 将返回对数组的引用。 \ 创建一个引用。

    getFruits2 将返回@fruits 中的值列表。它不会返回参考。如果将返回值分配给数组,则只会获得数组的副本。

    【讨论】:

      【解决方案2】:

      getFruits2 子例程返回一个列表,可以像这样将其分配给一个新数组

      my @newfruits = getFruits2();
      

      是的,它会生成数组中数据的副本

      【讨论】:

      【解决方案3】:

      getFruits1 返回一个引用。没有创建新数组。

      getFruits2 返回一个列表

      Perl 引用示例

      #!/usr/bin/perl -w 
      use strict;
      
      my @array = ('a','b','c');
      printf("[%s]\n",join('',@array));
      my $ref=\@array;
      ${@{$ref}}[0]='x'; # Modifies @array using reference
      printf("[%s]\n",join('',@array));
      

      【讨论】:

      • getFruits2 真的不返回数组。正如其他答案所指出的,它是一个列表。
      【解决方案4】:

      sub 唯一可以返回的是一个标量列表。数组无法返回。

      \@fruits
      

      计算参考,所以

      return \@fruits;
      

      返回一个引用。在列表上下文中,

      @fruits
      

      计算为@fruits的元素列表,所以

      return @fruits;
      

      如果 sub 在列表上下文中进行评估,则返回 @fruits 的元素列表。

      【讨论】:

        猜你喜欢
        • 2011-12-29
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        • 2011-02-25
        • 2019-09-06
        • 2011-07-19
        • 1970-01-01
        • 2011-08-30
        相关资源
        最近更新 更多