perl - 为什么不应该返回数组 ref?

标签 perl arrays reference

在问题 "Is returning a whole array from a Perl subroutine inefficient"如果不需要,有两个人建议不要优化。作为一般规则,优化会增加复杂性,如果不需要,简单更好。但是在这种特定情况下,返回一个数组与一个数组引用,我看不出有任何增加的复杂性,我认为界面设计的一致性会更重要。因此,我几乎总是做类似的事情:

sub foo
{
   my($result) = [];

   #....build up the result array ref

   $result;
}

有什么理由我不应该这样做,即使是很小的结果?

最佳答案

由于没有人提到wantarray , 我会 :-)

我认为让调用者决定它想要结果的上下文是一个很好的做法。例如,在下面的代码中,您向 perl 询问调用子例程的上下文并决定返回什么。

sub get_things {
    my @things;
    ... # populate things
    return wantarray ? @things : \@things;
}

然后
for my $thing ( get_things() ) {
    ...
}


my @things = get_things();

由于列表上下文,可以正常工作,并且:
my $things = get_things();

将返回数组的引用。

有关 wantarray 的更多信息|您可能想查看 perldoc -f wantarray .

编辑:我忽略了第一个答案,其中提到了 wantarray ,但我认为这个答案仍然有效,因为它使它更清晰一些。

关于perl - 为什么不应该返回数组 ref?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550906/

相关文章:

linux - 八个字符的模式识别

perl - "Can' t 修改非左值子程序调用"当从方法中添加 Moose 属性时

perl - PSGI 日志记录 (Perl)

javascript - 如何在 Javascript ES6 中按年和月排序

python - 是否有 python 示例的 pyqt4 引用文档?

c++ - 函数调用表达式的类型是什么?

javascript - 如何使用 cgi.pm 获得正确的 html header ?

javascript - 从数组中删除项目 - 按值不适用于 jQuery

python - 填充二维数组中的边界框

c++ - 按值调用 vs 按引用调用 const