Raku是一种渐进式键入语言。所以下面的代码:
my %hash = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
与相同
my Hash %hash = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
然而,它报告了一个错误:
Type check failed in assignment to %hash; expected Hash but got Rat (4.5)
为什么在使用胖箭头语法构建的哈希变量之前添加类型会导致类型检查失败错误?
当您说my Hash %hash
时,您指定的是一个仅将Hash
作为值的Hash
。在您的示例中,您将Rat
s作为值而不是Hash
es放入哈希中。这就是错误消息试图告诉您的。
你的例子这样更有意义:
my Numeric %hash = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
其中强制所有值为Numeric
。
另一种写法是:
my %hash is Hash[Numeric] = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
第一种方式只是第二种方式的句法糖。
如果也想限制密钥,也有两种方法:
my %hash is Hash[Numeric,Str] = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
将密钥限制为CCD_ 7。请注意,默认情况下,类型为Str()
,也就是:将任何内容强制为Str
,这与不同。
语法上更甜的方式是:
my Numeric %hash{Str} = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
我认为,是更可读的,因为它清楚地键入键是什么。