数组与列表数据类型?

Ste*_*nus 6 perl6

我知道这已经被要求用于Perl5了.
Perl6是否在数组和列表之间做出相同的区分?

rai*_*iph 11

它有所区别,但不完全相同.事实上,它的细节非常不同.

非正式列表和数组概念

有一个"列表"(带有小写的"l")的一般非正式概念,它是一个事物的概念,然后是另一个事物,然后是另一个事物.

这个一般概念有变体:参数列表,值列表等.

在这种非正式的层面上,单词"list"和"array"可以互换或用于表示可变性 - 单词"list"倾向于传达不变性,"数组"可变性.

形式类型:Positional,Iterable,List,Array,Seq等.

正式地,列出的东西是从定义类似列表数据的方面的角色构建的.两个主要的是PositionalIterable角色.

有一个List(大写"L")型doesPositionalIterable角色.一个List通常包含的值直接,没有内部Scalar的容器.如果a中的所有值List都是不可变的,那么整个列表是不可变的.此外,a List具有固定长度 - 您无法添加或删除元素.

还有一种Array类型.这是一个子类型List.一个Array实例通常含有值Scalar的容器.即使a中的所有值Array都是不可变值,您仍然可以更改数组.例如:

my @array = 1,2,3; # three immutable integers
@array[1] = 42;
say @array; # [1 42 3]
Run Code Online (Sandbox Code Playgroud)

还有其他几个重要的列表类型,Seq是"一个可迭代的,懒惰的值序列"; Capture用于各种目的,最明显的是用于包含参数列表和作为正则表达式/语法Match类的父类型; 等等.

doc.perl6.org上的"官方"文档有一个应该有用的列表,序列和数组页面.

请随时在下面的评论中提出后续问题,或者作为新的SO问题,我或其他人将在必要时扩展或澄清,也许我们可以改进文档.


mor*_*itz 7

让我在Perl 5中添加一个简短的列表; 在Perl 6中,它是一个常规类型,以逗号分隔的文字列表产生一个:

$ perl6 -e 'say (1, 2, 3).^name'
List
Run Code Online (Sandbox Code Playgroud)

阵列还支持push,pop,shift,unshiftsplice列出没有方法.