模式匹配OCaml中的变量?

Jac*_*ale 4 ocaml pattern-matching

如果我做

let check n = function
  | n -> true
  | _ -> false
Run Code Online (Sandbox Code Playgroud)

然后我明白了 Warning 11: this match case is unused.

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

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

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

Tik*_*vis 7

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

let check n = function
| x when x = n -> true
| _ -> false
Run Code Online (Sandbox Code Playgroud)

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

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