2013-07-16 64 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