容器一般用于多变量同时赋值,也有的语言用于提供函数返回多个值。函数
大多数语言均可以进行多变量同时赋值,在等号的右边就是一个隐含的容器code
x, y = 1, 2
Perl5 中有显式的容器,容器能够命名成一个变量:容器
my @sets = (1, 2); my ($x, $y) = @sets
而在 Go 语言中,返回多个值的函数隐含的提供了容器的功能:变量
x, y := return_multi_value() func return_multi_value() (int, int) { return 1, 2;
}数据类型
容器和列表不一样,列表是一个独立的值,在传递和复制的过程当中不会发生变化,而容器在赋值操做符的右侧;在做为参数传递后,会自动的解开,在 Perl6 中有显式的列表到容器的转换操做符 |:命名
my @sets = 1, 2; accept_multi_args(|@sets);
在大部分的语言中,容器的概念是隐藏起来的,不能复制,不能命名,不能显式的解开,也不能和列表互相转换。数据
一个能正确使用容器的语言,应当是这样的:语言
@sets = 1, 2 x, y = @sets // x == 1; y == 2 accept_multi_value(@sets) // 容器能够直接做为等价多个参数的形式传递到函数中 var_array = ( @sets ) // var_array 如今是真正的列表
Perl6 中有相似容器的概念,但不能自动的解耦。 Perl5 中把容器和列表混淆在一块儿。 其余的语言都会把这种数据类型隐藏起来。co