gpt4 book ai didi

perl - Perl 函数中的引用是否更好地返回值?

转载 作者:行者123 更新时间:2023-12-04 01:34:09 26 4
gpt4 key购买 nike

与返回对数组或散列的引用相比,返回数组或散列的优缺点是什么?

对内存或执行时间有影响吗?

两者在功能上有什么区别?

sub i_return_an_array
{
my @a = ();
# push things in @a;
return @a;
}

sub i_return_a_ref
{
my @a = ();
# push things in @a;
return \@a;
}

my @v = i_return_an_array();
my $v = i_return_a_ref();

最佳答案

是的,这对内存和执行时间有影响——返回一个引用只返回一个(相对较小的)标量而不是其他任何东西。将数组或散列作为列表返回会生成数组/散列的浅拷贝并返回,如果数组/散列很大,这可能需要大量时间来制作副本和存储副本的内存。

两者之间的功能差异只是一个问题,即您是将结果作为数组/散列还是作为 arrayref/hashref 处理。有些人认为引用文献处理起来要麻烦得多;就个人而言,我不认为这是一个显着差异。

另一个功能差异是您不能将多个数组或散列作为列表返回(它们被压缩为一个列表),但您可以返回多个引用。当出现这种情况时,这是一个迫使您使用引用的杀手级细节,但我的经验是它很少出现,所以我不知道我认为它在整体上有多重要。

转到标题问题,我认为关于返回列表与引用的最重要因素是您应该保持一致,这样您就不必浪费时间记住哪些函数返回数组/哈希以及哪些返回引用。鉴于引用在某些情况下更好,至少对我来说,引用从来没有明显更糟,我选择标准化始终将数组/哈希作为引用而不是列表返回。

(您也可以选择在您的子程序中标准化使用 wantarray,以便它们返回列表上下文中的列表和标量上下文中的引用,但我倾向于认为这是一种在很大程度上毫无意义的过度复杂化。)

关于perl - Perl 函数中的引用是否更好地返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5309613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com