【问题标题】:Perl 'context' in assignments作业中的 Perl“上下文”
【发布时间】:2016-01-07 23:20:41
【问题描述】:

作为 Perl 的新手,我只是不明白以下结果背后的哲学是什么:

$cnt1 = @arr;           
# this gives the length of the array 'arr'
$cnt2 = @arr[ @indices_arr ];          
# this gives the last element of the @arr[ @indices_arr ];

有人能解释一下两者的区别吗?

【问题讨论】:

  • 这两种结构都有用。两者都有记录。如果该语言缺少这两个特性之一,人们可能会问不实现其中一个特性的背后原理是什么。

标签: arrays perl list slice scalar


【解决方案1】:

来自perldoc perldata

对标量的赋值计算标量上下文中的右侧...

还有:

如果您在标量上下文中计算数组,它会返回数组的长度。

还有:

标量上下文中的切片返回切片的最后一项。

@arr 是一个数组; @arr[ @indices_arr ] 是一个数组切片。


至于这背后的哲学:列表和数组在 Perl 中是不同的数据类型,具有不同的行为(不要被切片中使用的@ sigil 抛出,切片是列表,而不是数组)。请参阅Arrays vs. Lists in Perl: What's the Difference? 以深入了解两者之间的差异。

【讨论】:

  • 为什么要评估他们所做的事情:获取数组的长度非常有用。我们将在标量上下文中为您提供,因为第一个或最后一个元素已经很容易获得(分别为$a[0]$a[-1])。 // 获取切片的长度没有用(它与索引的数量相同)。实际上,标量上下文中的切片没有多大意义,但需要处理这种情况,所以让@a[4]behaves 与$a[4] 相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
相关资源
最近更新 更多