เวอร์ชันของฟังก์ชันเป็นคำสั่งสั้น ๆ สำหรับไวยากรณ์การจับคู่แบบเต็มในกรณีพิเศษที่คำสั่งที่ตรงกันคือฟังก์ชันทั้งหมดและฟังก์ชันมีเพียงอาร์กิวเมนต์เดียว (สิ่งที่รวมเป็นหนึ่ง) หากคุณต้องการมีสองอาร์กิวเมนต์คุณต้องใช้ไวยากรณ์การจับคู่แบบเต็ม * คุณสามารถดูสิ่งนี้ได้ในประเภทของสองฟังก์ชันต่อไปนี้
//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 ??"
ดังที่คุณเห็นเวอร์ชันการจับคู่ใช้อาร์กิวเมนต์แยกกันสองอาร์กิวเมนต์ในขณะที่เวอร์ชันของฟังก์ชันใช้อาร์กิวเมนต์ tupled เดียว ฉันใช้เวอร์ชันของฟังก์ชันสำหรับฟังก์ชันอาร์กิวเมนต์เดียวส่วนใหญ่เนื่องจากฉันพบว่าไวยากรณ์ของฟังก์ชันดูสะอาดกว่า
* หากคุณต้องการจริงๆคุณสามารถรับเวอร์ชันฟังก์ชันเพื่อให้มีลายเซ็นประเภทที่ถูกต้อง แต่ในความคิดของฉันดูน่าเกลียดมาก - ดูตัวอย่างด้านล่าง
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"