Swift中我们可以用对一个函数进行柯里化,用来达到使一个方法达到更加灵活的适用于变话的相似需求函数的构造。
比如一个简单的函数,我们调用可以对我们传入Int数+1。
func addOne(num:Int) -> Int{
return num + 1
}
当我们想要获得能够对我们Int数+2 ,或者+3抑或是其他的数值的时候,我们如果重复的构造多个不同的函数来实现我们的需求,感觉是不是代码量会有很多冗余。在这种情况下 (Currying)就能够给我们构造函数提供更灵活的选择。
fun add(num:Int) -> (Int) -> Int{
return {
adder in
return adder + num
}
}
let addThree = add(3)
let addResult = addThree(10) //addResult = 13
同样的我们在实践一个例子,这个是任意比大小的函数构造
func compareBig( comparer:Int) -> (Int) -> Bool{
return{
$0 > comparer
}
}
let comparer10 = compareBig(10) 传入比较的值
compare10(11) 和11比较 //返回true
compare10(9) 和9比较 //返回false
在看上面的代码的时候,对代码中的adder in 还有 $0 比较疑惑 不知道是怎么这个传值是怎么做到的,查询了一些资料好像是swift的闭包不过不确定,有结论的话会在后文中补上。
$0则是Swift 自动为内联函数提供了参数名称缩写功能,可以直接通过$0,$1,$2来顺序调用闭包的参数。
对于柯里化函数的自己的理解,也就是通过对需要配置的变量做底层参数传到柯里化函数里,达到构造高层函数的目的,也就是我动态的给内层函数传递一个可配置的属性。从而活化的构造出不同需求的高层函数来。