首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从let使用列表中禁止非穷尽匹配警告

从let使用列表中禁止非穷尽匹配警告
EN

Stack Overflow用户
提问于 2017-09-01 17:58:25
回答 1查看 675关注 0票数 1

在OCaml中,可以按如下方式在列表中定义变量xy,但您会得到警告:

代码语言:javascript
运行
复制
let [x; y] = [2; 3];;
Characters 4-10:
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a case that is not matched:
(_::_::_::_|_::[]|[])

(在我的实际代码中,我有一个返回值列表的函数。有时我知道它只会返回两个值。)

在使用matchfunction时,我知道如何通过添加一个catch案例来抑制警告,在下面列出的问题的答案中对此进行了解释。当我使用上面的列表定义时,抑制警告的最好方法是什么?

这种模式匹配在OCaml中并不详尽。

抑制OCaml中的穷举匹配警告

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-01 18:23:27

使用所有的情况,如在

代码语言:javascript
运行
复制
let (x,y) = match [2;3] with
  | [x;y] -> (x,y)
  | _ -> assert false (* how could this list not have exactly 2 elements?*)

这可能不是个好主意,因为它给了你空间来评论为什么你只期望第一个模式。尽管如此,如果您确实坚持使用let,则可以使用属性暂时禁用警告,如下所示:

代码语言:javascript
运行
复制
[@@@ warning "-8"]
(* My list is guaranteed to have two elements. disable warning for a while. *)
let [x;y] = [2;3];;
[@@@ warning "+8"]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46005684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档