Perl 6中()和[]之间的区别

时间:2014-06-11 10:22:19

标签: arrays perl list data-structures perl6

我正在学习Perl 6,并且无法理解下面的Perl 6单行

我的Perl 6是rakudo-star: stable 2014.04 (bottled)

这很好用。数组/列表已排序

[njia@mb-125:~] : perl6 -e 'say [2443,5,33, 90, -9, 2, 764].sort'
-9 2 5 33 90 764 2443

但这不会对数组/列表进行排序,如果[].sort有效,为什么@s.sort没有呢?

[njia@mb-125:~] : perl6 -e 'my @s = [2443,5,33, 90, -9, 2, 764]; @s.sort.say'
2443 5 33 90 -9 2 764

[]更改为()

[njia@mb-125:~] : perl6 -e 'my @s = (2443,5,33,90,-9,2,764); @s.sort.say'
-9 2 5 33 90 764 2443

  

注意此问题中描述的行为在perl6的发布版本中已更改。请参阅下面G. Cito的回复。

2 个答案:

答案 0 :(得分:11)

对于那些可能对此答案感到困惑的人,问题是关于 Perl 6 ,而这些都不适用于Perl 5.

声明

my @s = [2443, 5, 33, 90, -9, 2, 764]

创建一个逐项数组并将其分配给@s[0],因此@s只有一个元素并对其进行排序毫无意义。

但是你可以

@s[0].sort.say

具有您期望的效果

答案 1 :(得分:4)

我要走出困境并参考一些CPAN的Perl6文档,其中可以将其视为list vs. array thing - a { {3}}与sequence of values对比(见doc.perl6.org)。

当然perl6足够不同,它保证自己的标签,但仍然 perl所以()创建一个列表并{[]并不奇怪1}}创建一个匿名数组。

> say [2443, 5, 33, 90, -9, 2, 764].WHAT
(Array)
> say (2443, 5, 33, 90, -9, 2, 764).WHAT
(List)

由于首先询问并回答了这个问题,行为发生了变化:

> my @s = [2443, 5, 33, 90, -9, 2, 764]
> @s.sort.say
(-9 2 5 33 90 764 2443)

请注意,排序后的输出为List,否则@sArray

> @s.sort.WHAT.say
(List)
> @s.WHAT.say
(Array)