Wersja funkcji to krótka wskazówka dla pełnej składni dopasowania w specjalnym przypadku, gdy instrukcja match to cała funkcja, a funkcja ma tylko jeden argument (krotki liczą się jako jeden). Jeśli chcesz mieć dwa argumenty, musisz użyć pełnej składni dopasowania *. Można to zobaczyć w typach następujących dwóch funkcji.
//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 ??"
Jak widać, wersja dopasowania przyjmuje dwa oddzielne argumenty, podczas gdy wersja funkcji przyjmuje jeden argument krotny. Używam wersji funkcji dla większości funkcji jednoargumentowych, ponieważ uważam, że składnia funkcji wygląda na czystszą.
* Jeśli naprawdę chciałeś, możesz sprawić, by wersja funkcji miała odpowiedni podpis typu, ale moim zdaniem wygląda to dość brzydko - patrz przykład poniżej.
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"