10

注意 这个 SO 不应该有 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

但这不会对数组/列表进行排序,如果[].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的回复。

4

2 回答 2

10

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

该声明

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

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

但是你可以

@s[0].sort.say

有你预期的效果

于 2014-06-11T11:34:54.377 回答
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)

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

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

请注意,排序后的输出是 a List,否则@s是 a Array

> @s.sort.WHAT.say
(List)
> @s.WHAT.say
(Array)
于 2014-06-20T13:30:53.370 回答