我正在学习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的回复。
答案 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
,否则@s
为Array
:
> @s.sort.WHAT.say
(List)
> @s.WHAT.say
(Array)