Scala 函數(shù)柯里化(Currying)
柯里化(Currying)指的是將原來(lái)接受兩個(gè)參數(shù)的函數(shù)變成新的接受一個(gè)參數(shù)的函數(shù)的過(guò)程。新的函數(shù)返回一個(gè)以原有第二個(gè)參數(shù)為參數(shù)的函數(shù)。
實(shí)例
首先我們定義一個(gè)函數(shù):
def add(x:Int,y:Int)=x+y
那么我們應(yīng)用的時(shí)候,應(yīng)該是這樣用:add(1,2)
現(xiàn)在我們把這個(gè)函數(shù)變一下形:
def add(x:Int)(y:Int) = x + y
那么我們應(yīng)用的時(shí)候,應(yīng)該是這樣用:add(1)(2),最后結(jié)果都一樣是3,這種方式(過(guò)程)就叫柯里化。
實(shí)現(xiàn)過(guò)程
add(1)(2) 實(shí)際上是依次調(diào)用兩個(gè)普通函數(shù)(非柯里化函數(shù)),第一次調(diào)用使用一個(gè)參數(shù) x,返回一個(gè)函數(shù)類(lèi)型的值,第二次使用參數(shù)y調(diào)用這個(gè)函數(shù)類(lèi)型的值。
實(shí)質(zhì)上最先演變成這樣一個(gè)方法:
def add(x:Int)=(y:Int)=>x+y
那么這個(gè)函數(shù)是什么意思呢? 接收一個(gè)x為參數(shù),返回一個(gè)匿名函數(shù),該匿名函數(shù)的定義是:接收一個(gè)Int型參數(shù)y,函數(shù)體為x+y。現(xiàn)在我們來(lái)對(duì)這個(gè)方法進(jìn)行調(diào)用。
val result = add(1)
返回一個(gè)result,那result的值應(yīng)該是一個(gè)匿名函數(shù):(y:Int)=>1+y
所以為了得到結(jié)果,我們繼續(xù)調(diào)用result。
val sum = result(2)
最后打印出來(lái)的結(jié)果就是3。
完整實(shí)例
下面是一個(gè)完整實(shí)例:
object Test { def main(args: Array[String]) { val str1:String = "Hello, " val str2:String = "Scala!" println( "str1 + str2 = " + strcat(str1)(str2) ) } def strcat(s1: String)(s2: String) = { s1 + s2 } }
執(zhí)行以上代碼,輸出結(jié)果為:
$ scalac Test.scala $ scala Test str1 + str2 = Hello, Scala!
更多建議: