La version de la fonction est un raccourci pour la syntaxe de correspondance complète dans le cas spécial où l'instruction de correspondance est la fonction entière et la fonction n'a qu'un seul argument (les tuples comptent pour un). Si vous souhaitez avoir deux arguments, vous devez utiliser la syntaxe de correspondance complète *. Vous pouvez le voir dans les types des deux fonctions suivantes.
//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 ??"
Comme vous pouvez le voir, la version de correspondance prend deux arguments distincts, tandis que la version de la fonction prend un seul argument multiplié. J'utilise la version de fonction pour la plupart des fonctions à argument unique car je trouve que la syntaxe de la fonction semble plus propre.
* Si vous le vouliez vraiment, vous pouvez obtenir la version de la fonction pour avoir la bonne signature de type, mais cela semble assez moche à mon avis - voir l'exemple ci-dessous.
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"