与返回数组或哈希的引用相比,返回数组或哈希有哪些优缺点?
对内存或执行时间有影响吗?
两者在功能上有何区别?
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 来处理。有些人认为参考文献使用起来比较麻烦;就我个人而言,我认为这没有显着差异。
另一个功能差异是,您不能将多个数组或散列作为列表返回(它们会被展平为单个列表),但您可以返回多个引用。当这个问题出现时,这是一个致命的细节,迫使你使用参考资料,但我的经验是,它很少出现,所以我不知道我认为它总体上有多重要。
回到标题问题,我认为关于返回列表与引用的最重要因素是您应该保持一致,这样您就不必浪费时间记住哪些函数返回数组/哈希以及哪些返回引用。鉴于引用在某些情况下更好,并且至少对我来说,引用从来没有明显更差,我选择标准化始终将数组/哈希作为引用而不是列表返回。
(You could也选择标准化使用wantarray
在你的潜艇中,以便它们将返回列表上下文中的列表和标量上下文中的引用,但我倾向于认为这是一个基本上毫无意义的过度复杂化。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)