数组与列表数据类型?

时间:2018-03-30 19:20:35

标签: perl6

我知道已经问过for Perl5 Perl6在数组和列表之间是否有相同的区别?

2 个答案:

答案 0 :(得分:11)

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

非正式列表和数组概念

"列表"的一般非正式概念。 (用小写字母' l')这是一件事的概念,然后是另一件事,然后是另一件事。

这个概念的变体有:变量列表,值列表等等。

在这个非正式级别上,单词" list"和"阵列"是可互换的还是用于表示可变性 - 单词" list"倾向于传达不变性,"阵列"可变性。

正式类型:Positional,Iterable,List,Array,Seq等

正式地,从roles定义列表类数据的方面构建了一些列表。两个主要的角色是PositionalIterable角色。

有一个List(大写' L')类型does PositionalIterable个角色。 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

数组也支持列表中没有的pushpopshiftunshiftsplice方法。