当前位置:  开发笔记 > 编程语言 > 正文

从Perl子例程返回一个完整的数组效率低吗?

如何解决《从Perl子例程返回一个完整的数组效率低吗?》经验,为你挑选了3个好方法。

我经常在Perl中有一个子程序,用一些信息填充数组.由于我也习惯于使用C++进行攻击,我发现自己经常在Perl中这样做,使用引用:

my @array;
getInfo(\@array);

sub getInfo {
   my ($arrayRef) = @_;
   push @$arrayRef, "obama";
   # ...
}

而不是更简单的版本:

my @array = getInfo();

sub getInfo {
   my @array;
   push @array, "obama";
   # ...
   return @array;
}

当然,原因是我不希望在子例程中本地创建数组,然后在返回时复制.

是对的吗?或者Perl是否优化了它?



1> user55400..:

那么首先返回一个数组引用呢?

sub getInfo {
  my $array_ref = [];
  push @$array_ref, 'foo';
  # ...
  return $array_ref;
}

my $a_ref = getInfo();
# or if you want the array expanded
my @array = @{getInfo()};

根据德曼的评论编辑:

也可以在函数中使用普通数组并返回对它的引用.

sub getInfo {
  my @array;
  push @array, 'foo';
  # ...
  return \@array;
}      



2> Leon Timmerm..:

传递引用更有效,但差异并不像C++那么大.参数值本身(表示:数组中的值)总是通过引用传递(尽管复制了返回的值).

问题是:这有关系吗?大多数时候,它没有.如果您要返回5个元素,请不要理会它.如果您要返回/传递100'000个元素,请使用引用.只有在瓶颈的情况下才对其进行优化.



3> Hynek -Pichi..:

如果我看一下你的例子并考虑你想做什么,我习惯用这种方式写它:

sub getInfo {
  my @array;
  push @array, 'obama';
  # ...
  return \@array;
}

当我需要返回大量数据时,在我看来这是一个简单的版本.您在第一个代码段中编写时不需要在外部分配数组sub,因为my这样做是为了您.反正你不应该做过早的优化,莱昂TIMMERMANS 建议.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有