La version de fonction est un raccourci pour la syntaxe de correspondance complète dans le cas particulier où l'instruction de correspondance est la fonction entière et la fonction n'a qu'un seul argument (les tuples comptent comme un). Si vous voulez avoir deux arguments, vous devez utiliser la syntaxe de correspondance complète *. Vous pouvez le voir dans les types des deux fonctions suivantes. Comme vous pouvez le voir, la version de match prend deux arguments séparés alors que la version de la fonction prend un seul argument. J'utilise la version de la fonction pour la plupart des fonctions à un seul argument, car je trouve la syntaxe de la fonction plus propre.
* Si vous voulez vraiment vous pouvez obtenir la version de fonction pour la signature de type droit, mais il semble assez laid à mon avis - voir 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 ??"
N'est-ce pas en fait l'inverse - c'est-à-dire que 'fun' est techniquement défini en termes de' function | _ -> ... '? –
Pour être précis, 'fun x y -> ...' serait 'fun x -> fun y -> ...', puis 'fun x -> ...' serait 'function | x -> ... '. C'est pourquoi vous pouvez faire correspondre les motifs dans 'fun' - par ex. 'fun (x :: xs) -> ...'. –