list - Perl 6 中任何类型的列表是什么类型?

标签 list raku

考虑以下 Python 代码(作为示例):

a = 5 
b = "a"
l = [a, b] # -> typing.List[typing.Any]
print(l)   
# [5, "a"]

列表类型llist ;它不受它所拥有的类型的限制,因为 Python 是非常动态类型的。

将其与强结构类型的 Go 进行对比:
var list []uint8{1, 2, 3, 4, 5, 6}

该列表只能保存最多 255 个无符号整数。它不能保存任何其他类型。

也去:
var multi interface{"string", []int{9, 5}, rune('5'), []interface{}}

接口(interface)允许变体类型的容器。

考虑 Perl 6,它比 Python 的动态类型更加say 6 + "1";。会给7 , 整数。 (谁认为这是一个好主意,我不知道。)

我喜欢在我的程序中逐渐键入(尤其是对于我正在学习的 Perl 6)它提高了可读性和可维护性。

以下都不起作用:
use strict;
my Int $n = 6;
my Str $x = "a";
my Int @l = $n, $x;

也不
use strict;    
my Int $n = 6;
my Str $x = "a";
my List @l = $n, $x;

你得到 Type check failed in assignment to @l; expected List but got Int . (其他列表构造语法( [vals]<vals> )给出相同的错误)。

什么工作是说类型是Any (或 Mu )这是有道理的。 (嗯,这对我来说很有意义,因为 Any 与 Python 3.5 使用的关键字相同。)
use strict;    
my Int $n = 6;
my Str $x = "a";
my Any @l = $n, $x;

但是使用 AnyMu首先有点违背了类型检查的目的。

列表的类型是什么,如果不是 List ?而且,为什么是my List $blah;如果类型检查永远不会通过任何值或其列表,则语法是否有效?

最佳答案

你解释错了,至少 Python 中的列表与 Perl6 中的列表不同,它实际上就像 Perl6 中的数组(而 Perl6 列表就像 Python 元组)。

当你这样做时:

my List @l = $n, $n;

you create an array @l enforce all its elements must be 类型 List .

所以你的第二个例子:
use strict;
my Int $n = 6;
my Int @l = $n, $n;

必须工作。

编码:
my Any @l = $n, $x;

是相同的:
my @l = $n, $x;

您已允许数组 @l 的元素成为任何类型。

关于list - Perl 6 中任何类型的列表是什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997353/

相关文章:

python - 根据具有相同项目但顺序不同的另一个列表对具有重复项的列表进行排序

css - 在 Chrome 中列出第一行的点

raku - 我可以转发声明稍后定义的 Perl 6 类吗?

r - 来自函数的消息被多次重复

python - 切片可能的空列表Python

python - 循环转置和连接数据帧列表

raku - 在 Perl 6 中使用修饰符创建字符类

oop - 如何使用包含 where 的抽象多方法?

raku - 是否可以在运行时在其他上下文中创建新的词汇符号?

grammar - .parse anchor 还是 :sigspace first in a Perl 6 rule?