Phiên bản hàm là cách viết tắt của cú pháp đối sánh đầy đủ trong trường hợp đặc biệt khi câu lệnh đối sánh là toàn bộ hàm và hàm chỉ có một đối số duy nhất (số bộ giá trị là một). Nếu bạn muốn có hai đối số thì bạn cần sử dụng cú pháp đối sánh đầy đủ *. Bạn có thể thấy điều này trong các kiểu của hai hàm sau.
//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 ??"
Như bạn có thể thấy, phiên bản đối sánh có hai đối số riêng biệt trong khi phiên bản hàm có một đối số được nhóm đơn. Tôi sử dụng phiên bản hàm cho hầu hết các hàm đối số đơn lẻ vì tôi thấy cú pháp hàm trông gọn gàng hơn.
* Nếu bạn thực sự muốn, bạn có thể lấy phiên bản hàm để có chữ ký đúng kiểu nhưng theo ý kiến của tôi thì nó trông khá xấu - xem ví dụ bên dưới.
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"