代码之家  ›  专栏  ›  技术社区  ›  chenyf

为什么在使用胖箭头语法生成的哈希变量之前添加类型会导致类型检查失败错误?

  •  1
  • chenyf  · 技术社区  · 2 年前

    拉库是 gradual typing 语言下面的代码是:

    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)
    

    为什么在使用胖箭头语法生成的哈希变量之前添加类型会导致类型检查失败错误?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Elizabeth Mattijsen    2 年前

    当你说 my Hash %hash ,您正在指定 Hash 那只需要 搞砸 作为一个 价值 .在你的例子中,你把 Rat s作为值进入哈希,而不是 搞砸 锿。这就是错误消息试图告诉你的。

    这样,你的例子会更有意义:

    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;
    

    会把钥匙限制在 Str 。请注意,默认情况下,类型为 Str() ,又名: 胁迫 有什么事吗 Str ,也就是 相同的。

    更具语法甜味的方式是:

    my Numeric %hash{Str} = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
    

    我想, 更具可读性,因为可以清楚地知道键入的键是什么。

    推荐文章