如果我做
let check n = function
| n -> true
| _ -> false
然后我得到Warning 11: this match case is unused.
我明白为什么,因为n
在| n -> true实际上不是check
. 它基本上是由模式匹配创建的变量。
我的问题是,在这种情况下,我们是否有任何方法仍然使用模式匹配(而不是 if else)来强制进行此检查?
即,我想与参数进行模式匹配n
。
如果我做
let check n = function
| n -> true
| _ -> false
然后我得到Warning 11: this match case is unused.
我明白为什么,因为n
在| n -> true实际上不是check
. 它基本上是由模式匹配创建的变量。
我的问题是,在这种情况下,我们是否有任何方法仍然使用模式匹配(而不是 if else)来强制进行此检查?
即,我想与参数进行模式匹配n
。
您可以使用when
带有布尔条件的模式:
let check n = function
| x when x = n -> true
| _ -> false
但是,这并不是很特别:它只是使用if
.
OCaml 不支持任何让您匹配变量值的“动态”模式——模式都是静态的。有一种名为bondi的研究语言确实支持这样的动态模式。它与 OCaml 非常相似,因此如果您对此类功能感兴趣,您应该尝试一下。
您会收到该警告,因为n
匹配与 相同(任何值)_
,因此您永远无法到达第二个匹配案例。这暗示了您的程序中可能存在的问题。