如果我这样做
let check n = function
| n -> true
| _ -> false
然后我得到Warning 11: this match case is unused.
我理解为什么,因为中的n
n - > true 实际上不是check
的参数。它基本上是由模式匹配创建的变量。
我的问题是,在这种情况下,我们还有办法继续使用模式匹配(而不是if else)强制进行此项检查吗?
即,我想与参数n
进行模式匹配。
答案 0 :(得分:7)
您可以使用when
来设置模式以及布尔条件:
let check n = function
| x when x = n -> true
| _ -> false
但是,这不是很特别:使用if
的语法不同。
OCaml不支持任何类型的“动态”模式,可以与变量的值进行匹配 - 模式都是静态的。有一种名为bondi的研究语言可以支持这样的动态模式。它与OCaml非常相似,所以如果你对这类功能感兴趣,你应该玩它。
答案 1 :(得分:3)
您收到该警告是因为n
与_
匹配相同(任何值),因此您永远无法达到第二个匹配案例。哪个会导致您的计划出现问题。