模式匹配OCaml中的变量?

时间:2013-07-16 10:47:33

标签: pattern-matching ocaml

如果我这样做

let check n = function
  | n -> true
  | _ -> false

然后我得到Warning 11: this match case is unused.

我理解为什么,因为中的n n - > true 实际上不是check的参数。它基本上是由模式匹配创建的变量。

我的问题是,在这种情况下,我们还有办法继续使用模式匹配(而不是if else)强制进行此项检查吗?

即,我想与参数n进行模式匹配。

2 个答案:

答案 0 :(得分:7)

您可以使用when来设置模式以及布尔条件:

let check n = function
| x when x = n -> true
| _ -> false

但是,这不是很特别:使用if的语法不同。

OCaml不支持任何类型的“动态”模式,可以与变量的进行匹配 - 模式都是静态的。有一种名为bondi的研究语言可以支持这样的动态模式。它与OCaml非常相似,所以如果你对这类功能感兴趣,你应该玩它。

答案 1 :(得分:3)

您收到该警告是因为n_匹配相同(任何值),因此您永远无法达到第二个匹配案例。哪个会导致您的计划出现问题。