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

Ask*_*arn 10 arrays perl perl6 data-structures raku

我正在学习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
Run Code Online (Sandbox Code Playgroud)

但这不会排序数组/列表,如果[].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
Run Code Online (Sandbox Code Playgroud)

从改变[]()

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

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

Bor*_*din 11

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

该声明

my @s = [2443, 5, 33, 90, -9, 2, 764]
Run Code Online (Sandbox Code Playgroud)

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

不过你可以

@s[0].sort.say
Run Code Online (Sandbox Code Playgroud)

这有你期望的效果

  • @Borodin [@Ask and Learn](http://stackoverflow.com/users/2681383/ask-and-learn) ......已经有 4 年多的时间了,但是随着 perl6 的圣诞节发布,这已经发生了变化。可能是由于在 Great List Refactor 期间对内容进行了返工。 (2认同)

G. *_*ito 5

我要去无路可退,并参考一些CPAN的Perl6文档的地方,这可能被视为一个列表与数组的东西-一个值序列与一个分项值序列(见doc.perl6.org)。

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

> say [2443, 5, 33, 90, -9, 2, 764].WHAT
(Array)
> say (2443, 5, 33, 90, -9, 2, 764).WHAT
(List)
Run Code Online (Sandbox Code Playgroud)

自从首次提出并回答此问题以来,行为已发生变化:

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

请注意,排序时的输出是 aList否则@sArray

> @s.sort.WHAT.say
(List)
> @s.WHAT.say
(Array)
Run Code Online (Sandbox Code Playgroud)