2013-07-16 41 views
4

如果我做与OCaml中的变量匹配的模式?

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

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

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

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

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

回答

7

您可以使用when有图案与布尔条件一起:

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

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

OCaml不支持任何种类的“动态”模式,它可以让您匹配变量的 - 模式都是静态的。有一种名为bondi的研究语言支持这种动态模式。这与OCaml非常相似,所以如果你对这种功能感兴趣,你应该玩弄它。

2

由于n_的匹配值相同(任何值),所以您会得到该警告,因此您无法达到第二个匹配情况。哪些隐藏在您的程序中可能存在的问题。

+0

是的,我明白,在我的问题表示。我的问题是,如果我想尝试匹配函数的参数呢? –

+1

@JacksonTale请注意,以下是完全等同:'让查=功能N - > ...'和'让检查N =匹配n,其中N - > ...' – lukstafi