我要把它编辑成 my other related question ,但感觉已经足够不同了,我不想每个问题都问太多问题。
我的心……爆炸了。
考虑:
use strict;
my Int $n = 6;
my Str $x = "a";
my @l = $n, $x;
say @l ~~ List;
版画
True
,正如预期的那样。考虑,那么:
use strict;
my Int $n = 6;
my Str $x = "a";
my List @l = $n, $x; # <-- only change is the type notation
say @l ~~ List;
哪个死亡:
Type check failed in assignment to @l; expected List but got Int
所以...... List 的类型是 List 但我不能说它是 List 因为那是一种罪过!
这里发生了什么?这是一个错误吗?或者我是否将我不相关的 Python 和 Go 习语带到 Perl 并破坏了一些东西?
最佳答案
my List @l = $n, $x;
不会做你认为它会做的事情。它没有声明
@l
是 List
.它声明 @l
的元素将是 List
s。您不需要声明 @l
将是一个数组;当您使用印记时,您已经这样做了。你可以通过替换
List
来移动爆炸与 Int
让 Perl 6 期待一个列表 Int
s。
关于types - 考虑到 Perl 6 的类型系统,这个 Perl 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997670/