在OCaml中,您可以按如下方式在列表中定义变量x
和y
,但会收到警告:
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:
(_::_::_::_|_::[]|[])
(在我的实际代码中,我有一个返回值列表的函数。有时我知道它只会返回两个值。)
我知道如何在使用match
或function
时通过添加一个包罗万象的案例来取消警告,如下面问题的答案中所述。当我使用上面的列表定义时,抑制警告的最佳方法是什么?
答案 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"]