【问题标题】:SML datatype casting: binding not exhaustiveSML 数据类型转换:绑定并不详尽
【发布时间】:2020-05-07 15:09:37
【问题描述】:

我有这个“形状”,就像 The Little MLer 所说的那样

datatype 'a pizza =
         Bottom
         | Topping of ('a * ('a pizza))

还有这个

datatype fish =
         Anchovy
         | Lox
         | Tuna

这是这个数据类型的一个对象

Topping (Tuna, (Topping (Anchovy, Topping (Lox, Topping (Tuna, Bottom)))))

类型为fish pizza。现在,当我尝试这个时

val Topping (f1,f2) = Topping (Tuna, (Topping (Anchovy, Topping (Lox, Topping (Tuna, Bottom)))))

这是警告

stdIn:1.6-514.6 Warning: binding not exhaustive
:           Topping (f1,f2) = ...
: val f1 = Tuna : fish
: val f2 = Topping (Anchovy,Topping (Lox,Topping (Tuna,Bottom))) : fish pizza

我需要的是一种访问Tunaf1f2 将是

(Topping (Anchovy, Topping (Lox, Topping (Tuna, Bottom))))

就像一个列表的头部和尾部。为什么警告?如何获得x::xs 格式以便于头尾操作?

【问题讨论】:

    标签: types sml


    【解决方案1】:

    这是一个警告,因为您的模式与 Bottom 不匹配 - 当时不评估匹配的值,只有类型是已知的。

    既然你知道披萨不是Bottom,你可以放心地忽略它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2016-10-06
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多