gpt4 book ai didi

ocaml - 警告 8 : Incomplete pattern matching warning in a let statement

转载 作者:行者123 更新时间:2023-12-04 22:30:20 25 4
gpt4 key购买 nike

我经常在 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 指出,在没有嵌套的情况下,显式转换函数效果很好。是否还有嵌套类型匹配的版本?

最佳答案

如果你确定你得到了正确的案例并且你使用的是 OCaml 4.02 或更高版本,你可以添加 [@@warning "-8"]到您的声明。

the OCaml manual有关属性的更多详细信息。

在以前版本的 OCaml 上,您可以禁用关于整个文件的警告(这取决于您的构建工作流程)或使用显式模式匹配,如 Jeffrey Scofield 的回答中所述。

不过,我建议不要“禁用整个文件的警告”,因为它会掩盖其他不完整的模式匹配,这些匹配可能会在当前(很容易发现)以意想不到的方式破坏您的代码......或在 future 的某个地方(例如,如果您更改了在以后升级中匹配的类型)。

关于ocaml - 警告 8 : Incomplete pattern matching warning in a let statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29801357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com