我经常在let语句中进行模式匹配,其中我知道结果的形状。很显然,我不能指望编译器通常会推断这些知识,但也许有一种更简单的方式来做到这一点。警告8:let语句中的模式匹配警告不完整
举个例子,请看下面的代码:
type foo = A of int | B of string
let x = (true, A 0)
let (b, A i) = x in i + 2
哪个正确警告我,说的(_, B _)
结果是不匹配的。一种可能的方法是明确处理丢失的案例,如下所示:
let (b,i) = match x with
| (a, A j) -> (a,j+2)
| _ -> failwith "implementation error!"
但是,这掩盖了实际的计算。有更简洁的选择吗?
编辑: Jeffrey Scofield表示,在没有嵌套的情况下,显式转换函数效果很好。是否还有嵌套类型匹配的版本?
通常安全的方法是定义'i'然后定义'x',这样你就可以提取'i'而没有运行时错误的风险;例如'让我= 0 ;;让x =(true,A i);; i + 2 ;;' –