如果我做
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/