Eşleşme ifadesinin tüm işlev olduğu ve işlevin yalnızca tek bir argümana sahip olduğu (tuplelar bir olarak sayılır) özel durumda işlev sürümü, tam eşleşme sözdizimi için kısa bir eldir. İki bağımsız değişkene sahip olmak istiyorsanız, tam eşleşme sözdizimini * kullanmanız gerekir. Bunu aşağıdaki iki işlevin türlerinde görebilirsiniz.
//val match_test : string -> string -> string
let match_test x y = match x, y with
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"
//val function_test : string * string -> string
let function_test = function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"
Gördüğünüz gibi, eşleşme sürümü iki ayrı argüman alırken, fonksiyon versiyonu tek bir tupled argüman alır. İşlev sözdiziminin daha temiz göründüğünü bulduğum için çoğu tek bağımsız değişken işlevi için işlev sürümünü kullanıyorum.
* Eğer gerçekten istiyorsanız, işlev sürümünün doğru tip imzasına sahip olmasını sağlayabilirsiniz, ancak bence oldukça çirkin görünüyor - aşağıdaki örneğe bakın.
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"