如果我做

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

然后我得到 Warning 11: this match case is unused.
我明白为什么 ,因为 中的 n | n -> true 实际上不是 check 的参数。它基本上是由模式匹配创建的变量。

我的问题是 ,在这种情况下,我们有什么办法仍然使用模式匹配(而不是 if else)来强制执行此检查?

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

最佳答案

您可以使用 when 来获得模式和 bool 条件:

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

然而,这并不是很特别:它只是使用 if 的不同语法。

OCaml 不支持任何让您匹配变量值的“动态”模式——模式都是静态的。有一种名为 bondi 的研究语言确实支持这样的动态模式。它与 OCaml 非常相似,因此如果您对此类功能感兴趣,您应该尝试一下。

关于pattern-matching - 模式匹配 OCaml 中的变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17674549/

10-12 00:42
查看更多