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)
这有你期望的效果
我要去无路可退,并参考一些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
否则@s
是Array
:
> @s.sort.WHAT.say
(List)
> @s.WHAT.say
(Array)
Run Code Online (Sandbox Code Playgroud)