【问题标题】:Double index in Perl, why is it so?Perl中的双重索引,为什么会这样?
【发布时间】:2011-03-06 07:38:07
【问题描述】:

@a=(6,3,5,7);

@b=(@a[0..3])[2..3];

print @b;

#print 57

但对于

@b=@a[0..3][2..3];

我收到语法错误。有人能解释一下原因吗?

【问题讨论】:

    标签: perl arrays multidimensional-array


    【解决方案1】:
    @a=(6,3,5,7);
    

    这将创建一个包含 4 个元素的数组。

    (@a[0..3])
    

    这将返回一个列表,其中包含与@a 相同的四​​个元素。

    (@a[0..3])[2..3];
    

    这会从括号内的 4 元素列表中选择最后两个元素。

    print( join( ",", @b ) );
    

    这将打印5,7@a 中的最后两个元素。

    为了好玩,试试以下:

    @a=(6,3,5,7);
    @b=(@a[0..3]);
    print( "\@b=" . join(",",@b) . "\n" );
    @c=@b[2..3];
    print( "\@c=" . join(",",@c) . "\n" );
    

    请注意,我使用 Perl 调试器来理解您的程序。如果您不确定 Perl 逐行执行的实际操作,您也可以这样做。

    【讨论】:

      【解决方案2】:

      $a[1][2] for 用于二维表,实际上是$a[1]->[2]的缩写

      所以第一个索引需要返回一个引用而不是数组的切片。

      语法错误来自 Perl 不知道如何取消引用数组。

      【讨论】:

      • 我猜这意味着数组的切片不是列表。如果是第二个例子,就会编译。
      • 不,这意味着切片不是指向另一个数组的指针。在第一个示例中,您首先使用括号评估一个切片,这会产生一个列表,然后您取其中的一个切片。在第二个示例中,perl 尝试查找第一个索引所指向的数组,它找到的是一个数组而不是指针/引用并且失败了。
      猜你喜欢
      • 2019-05-23
      • 2010-11-01
      • 2018-12-13
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2018-06-08
      相关资源
      最近更新 更多