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

$#array在Perl中意味着什么?

如何解决《$#array在Perl中意味着什么?》经验,为你挑选了3个好方法。

我正在查看以下代码段:

my @ret = 
return (undef) if( $DB_ERROR );
return (undef) unless ($#ret >= 0);

$#只是给你一个数组中元素的计数?



1> Ed Guiness..:

$#arrayname给出最后一个元素的索引,所以如果数组@ret有2个元素$#ret则为1.

而且,正如Barry Brown所说,空数组给出了-1.

要获得长度,您可以在标量上下文中使用该数组:

print scalar @ret;



2> Schwern..:

edg是正确的,但原始代码是不必要的钝.在大多数情况下,$#foo是一个红旗,代码可以更简单地使用scalar @foo.

return (undef) unless ($#ret >= 0);

unless foo >= bar很难解开.首先,把它变成一个积极的声明.

return (undef) if ($#ret < 0);

$#ret <0时是什么时候?当它是-1.$#ret -1是一个长度为0的数组.所以上面的内容可以简单地写成......

return (undef) if scalar @ret <= 0;

但你不能有一个负长度数组,所以......

return (undef) if scalar @ret == 0;

并且==处于标量上下文中,因此"标量"是多余的......

return (undef) if @ret == 0;

但这只是一种说"如果@ret是假的" 的冗长方式.

return (undef) if !@ret;

我认为简单的语句修饰符更好地表达,除非.

return (undef) unless @ret;

是不是更容易遵循?

作为最后的附注,return undef不鼓励因为它在列表上下文中做错了.你得到一个包含一个undef元素的列表,这是真的.相反,只需使用一个空白返回,它返回标量上下文中的undef和列表上下文中的空列表.

return unless @ret;



3> 小智..:

请注意,当数组元素为零时,$#数组表达式将返回-1.

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