为什么第三次打印失败?
my @a = (0,1,2,3);
print @a[-@a..-2]; # works
print @a[0..2]; # works
print @a[0..-2]; # prints nothing
Run Code Online (Sandbox Code Playgroud)
我不清楚-@a在本@a[-@a..-2]声明中使用的含义.这是一种特殊的语法吗?除了$#a例如,这种特殊语法提供了什么(如果有的话)?它是某种糖(由于它只有一个字符而变得很奇怪),其中子索引中使用的数组符号意味着"该数组的长度"?
根据以下情况,第3个print没有打印,因为perldoc perlop:
如果左侧值大于右侧值,则返回空列表.
另见perldoc B::Deparse:
$ perl -MO=Deparse code.pl
my(@a) = (0, 1, 2, 3);
print @a[-@a .. -2];
print @a[0..2];
print @a[()];
Run Code Online (Sandbox Code Playgroud)
我相信print @a[-@a..-2];"有效",因为它真的很像@a[-4 .. -2].根据perldoc perldata:
负下标从末尾检索其值.
因此,3是索引-1,2是索引-2,1是索引-3而0是索引-4.
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |