La versione della funzione è una scorciatoia per la sintassi della corrispondenza completa nel caso speciale in cui l'istruzione match è l'intera funzione e la funzione ha solo un singolo argomento (le tuple contano come uno). Se vuoi avere due argomenti, devi usare la sintassi di corrispondenza completa *. Puoi vederlo nei tipi delle seguenti due funzioni.
//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 ??"
Come puoi vedere, match version accetta due argomenti separati mentre la funzione version accetta un singolo argomento tuplicato. Uso la versione della funzione per la maggior parte delle funzioni con argomento singolo poiché trovo che la sintassi della funzione sia più pulita.
* Se davvero lo desideri, puoi ottenere la versione della funzione per avere la firma del tipo giusto, ma a mio parere sembra piuttosto brutta - vedi l'esempio sotto.
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"