Swift 中的咖喱(Curried )函数
NM, 刚想正经写一篇技术的博客,却发现咖喱函数表示在Swift (当前为3.0)中已经被去掉了!不过,善始善终,我还是把这篇写完吧。
咖喱函数是一个源至函数式编程的概念。首先考虑我们所熟悉的带有默认参数的函数。一个带有参数的函数可以设一个或多个参数的默认值。在函数被调用时,如果不指定,会自动使用这些默认值。因为函数的默认参数值是在编译时就决定了的,所以在运行时不能被改变。
而咖喱函数提供了进一步的灵活性,这个值是在运行时决定的,因而是“可变的”。对应于一个已有的函数,它可以生成一个对应的将其中某个参数固化了的函数。下面看例子
通常的情形:
func addTwoNumbers(first: Int, second, Int) -> Int {
return first + second
}
addTwoNumbers(first: 1, second: 2)
对应的咖喱函数是
fun addTwoNumbers_Curried(first Int)(second: Int) -> Int {
return first + second
}
看起来没有太大不同吧,下面看看如何使用
let addTwoNumbers_4 = addTwoNumbers_Curried(4)
let addTwoNumbers_6 = addTwoNumbers_Curried(6)
addTwoNumbers_4(second: 8) // 12
addTwoNumbers_6(second: 8) // 14
更有用的是
func foo() -> Int {
...
}
let addTwoNumbers_Foo = addTwoNumbers_Curried(foo())
addTwoNumbers_Foo(8) // foo() + 8
可以给一个加了咖喱的函数继续加咖喱么?Why not?
参考:
https://ijoshsmith.com/2014/06/09/curried-functions-in-swift/