从let使用列表中抑制非详尽匹配警告

时间:2017-09-01 17:58:25

标签: ocaml

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

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时通过添加一个包罗万象的案例来取消警告,如下面问题的答案中所述。当我使用上面的列表定义时,抑制警告的最佳方法是什么?

this pattern-matching is not exhaustive in OCaml

Suppress exhaustive matching warning in OCaml

1 个答案:

答案 0 :(得分:3)

使用

中的catch-all案例
let (x,y) = match [2;3] with
  | [x;y] -> (x,y)
  | _ -> assert false (* how could this list not have exactly 2 elements?*)

可能不是一个坏主意,因为它给你空间来评论为什么你只期望第一个模式。也就是说,如果你真的坚持使用let,你可以使用attributes暂时禁用警告,如:

[@@@ warning "-8"]
(* My list is guaranteed to have two elements. disable warning for a while. *)
let [x;y] = [2;3];;
[@@@ warning "+8"]