7

如果我做

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

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

我明白为什么,因为n| n -> true实际上不是check. 它基本上是由模式匹配创建的变量。

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

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

4

2 回答 2

10

您可以使用when带有布尔条件的模式:

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

但是,这并不是很特别:它只是使用if.

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

于 2013-07-16T10:53:20.303 回答
3

您会收到该警告,因为n匹配与 相同(任何值)_,因此您永远无法到达第二个匹配案例。这暗示了您的程序中可能存在的问题。

于 2013-07-16T10:50:24.180 回答