La versión de función es una breve parte de la sintaxis partido completo en el caso especial en que la declaración partido es la función entera y la función sólo tiene un único argumento (tuplas cuentan como uno). Si desea tener dos argumentos, debe usar la sintaxis de coincidencia completa *. Puedes ver esto en los tipos de las siguientes dos funciones.
//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 ??"
Como puede ver, la versión de coincidencia toma dos argumentos separados, mientras que la versión de la función toma un único argumento acumulado. Utilizo la versión de la función para la mayoría de las funciones de un solo argumento, ya que encuentro que la sintaxis de la función parece más limpia.
* Si realmente quería que usted puede conseguir la versión de función para tener el tipo de firma correcta, pero se ve bastante feo en mi opinión - véase el ejemplo a continuación.
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"
¿No es realmente al revés? Es decir, 'diversión' se define técnicamente en términos de' función | _ -> ... '? –
Para ser específico, 'fun xy -> ...' sería 'diversión x -> diversión y -> ...', y luego 'diversión x -> ...' sería 'función | x -> ... '. Es por eso que puedes hacer coincidencias de patrones en 'divertido' - p. Ej. 'fun (x :: xs) -> ...'. –