F# 一个以上参数的功能
示例
在F#中,所有函数仅使用一个参数。这似乎很奇怪,因为在函数声明中声明多个参数非常容易:
let add x y = x + y
但是,如果在F#交互式解释器中键入该函数声明,则会看到其类型签名为:
val add : x:int -> y:int -> int
没有参数名称,该签名为int->int->int。该->操作是右结合的,这意味着该签名等同于int->(int->int)。换句话说,add是一个函数,它有一个int参数,并返回一个函数,它有一个int和回报int。试试看:
let addTwo = add 2 // val addTwo : (int -> int) let five = addTwo 3 //值五:整数=5
但是,您还可以像add更“常规”的方式调用函数一样,直接向它传递两个参数,它将像您期望的那样工作:
let three = add 1 2 //值三:整数=3
这适用于具有所需参数的函数:
let addFiveNumbers a b c d e = a + b + c + d + e // val addFiveNumbers : a:int -> b:int -> c:int -> d:int -> e:int -> int let addFourNumbers = addFiveNumbers 0 // val addFourNumbers : (int -> int -> int -> int -> int) let addThreeNumbers = addFourNumbers 0 // val addThreeNumbers : (int -> int -> int -> int) let addTwoNumbers = addThreeNumbers 0 // val addTwoNumbers : (int -> int -> int) let six = addThreeNumbers 1 2 3 //这将计算0+0+1+2+3 //值六:整数=6
这种将多参数函数视为具有一个参数并返回新函数的函数的方法(可能依次具有一个参数并返回新函数,直到到达具有最终参数并最终返回结果的最终函数)为了纪念以开发该概念而闻名的数学家HaskellCurry,他将其称为currying。(它是别人发明的,但是咖喱理应得到大多数赞誉。)
F#中使用了这个概念,您需要熟悉一下。