types - 考虑到 Perl 6 的类型系统,这个 Perl 有什么意义?

标签 types raku

我要把它编辑成 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;

不会做你认为它会做的事情。它没有声明 @lList .它声明 @l 的元素将是 List s。您不需要声明 @l将是一个数组;当您使用印记时,您已经这样做了。

你可以通过替换 List 来移动爆炸与 Int让 Perl 6 期待一个列表 Int s。

关于types - 考虑到 Perl 6 的类型系统,这个 Perl 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997670/

相关文章:

c++ - 图像数据使用什么数据类型以避免 std :bad_alloc?

raku - 编写属性特征

physics - 我可以在一行上写多个 raku Type 智能匹配吗

require - 需求行为(静态+动态)[RAKU]

type-conversion - Perl6 类属性中的类型强制

语法正则表达式独立匹配但不匹配

c++ - Haskell 等同于非类型上的 C++ 模板

haskell - Haskell 中的类型级多态性

c++ - C++ 中的类型安全类型定义

go - 如何填充作为函数引用传递的接口(interface)片段