Die Funktionsversion ist eine Kurzform für die vollständige Übereinstimmungssyntax in dem speziellen Fall, in dem die Übereinstimmungsanweisung die gesamte Funktion ist und die Funktion nur ein einziges Argument hat (Tupel zählen als eins). Wenn Sie zwei Argumente haben möchten, müssen Sie die vollständige Übereinstimmungssyntax * verwenden. Sie können dies an den Typen der folgenden beiden Funktionen erkennen.
//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 ??"
Wie Sie sehen können, verwendet die Match-Version zwei separate Argumente, während die Funktionsversion ein einzelnes Tupel-Argument verwendet. Ich verwende die Funktionsversion für die meisten Funktionen mit einzelnen Argumenten, da ich finde, dass die Funktionssyntax sauberer aussieht.
* Wenn Sie wirklich wollten, können Sie die Funktionsversion mit der richtigen Typensignatur erhalten, aber sie sieht meiner Meinung nach ziemlich hässlich aus - siehe Beispiel unten.
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"