我知道已经问过for Perl5 Perl6在数组和列表之间是否有相同的区别?
答案 0 :(得分:11)
它有所区别,但不完全相同。事实上,它的细节非常不同。
"列表"的一般非正式概念。 (用小写字母' l')这是一件事的概念,然后是另一件事,然后是另一件事。
这个概念的变体有:变量列表,值列表等等。
在这个非正式级别上,单词" list"和"阵列"是可互换的还是用于表示可变性 - 单词" list"倾向于传达不变性,"阵列"可变性。
正式地,从roles定义列表类数据的方面构建了一些列表。两个主要的角色是Positional
和Iterable
角色。
有一个List
(大写' L')类型does
Positional
和Iterable
个角色。 List
通常在Scalar
containers内直接包含值 not 。如果List
中的所有值都是不可变的,那么整个列表是不可变的。此外,List
具有固定长度 - 您无法添加或删除元素。
还有Array
类型。它是List
的子类型。 Array
实例通常包含Scalar
个容器中的值。即使Array
中的所有值都是不可变值,您仍然可以更改数组。例如:
my @array = 1,2,3; # three immutable integers
@array[1] = 42;
say @array; # [1 42 3]
还有其他一些重要的列表类型,Seq
是"一个可迭代的,懒惰的值序列&#34 ;; Capture
用于各种目的,最明显的是用于包含参数列表和作为正则表达式/语法Match
类的父类型;等等。
"官方" doc.perl6.org上的文档有一个Lists, Sequences, and Arrays页面应该会有所帮助。
随意在下面的评论中提出跟进问题,或者作为新的SO问题,我或其他人会在必要时扩展或澄清,或许可以改进文档。
答案 1 :(得分:7)
让我在Perl 5中添加一个简短的列表;在Perl 6中,它是regular type,以逗号分隔的文字列表产生一个:
$ perl6 -e 'say (1, 2, 3).^name'
List
数组也支持列表中没有的push
,pop
,shift
,unshift
和splice
方法。