Scala系列之柯里化,柯里化是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函數(shù)的第一個參數(shù))的函數(shù),
并且返回接受余下的參數(shù)而且返回結(jié)果的新函數(shù)的技術(shù)。
下面先給出一個普通的非柯里化的函數(shù)定義,實現(xiàn)一個加法函數(shù):
scala> def plainOldSum(x:Int,y:Int) = x + y
plainOldSum: (x: Int, y: Int)Int
scala> plainOldSum(1,2)
res0: Int = 3
使用“柯里化”技術(shù),把函數(shù)定義為多個參數(shù)列表:
scala> def curriedSum(x:Int)(y:Int) = x + y
curriedSum: (x: Int)(y: Int)Int
scala> curriedSum (1)(2)
res0: Int = 3
當你調(diào)用 curriedSum (1)(2)時,實際上是依次調(diào)用兩個普通函數(shù)(非柯里化函數(shù)),第一次調(diào)用使用一個參數(shù) x,返回一個函數(shù)類型的值,第二次使用參數(shù)y調(diào)用這個函數(shù)類型的值,我們使用下面兩個分開的定義在模擬 curriedSum 柯里化函數(shù):
首先定義第一個函數(shù):
scala> def first(x:Int) = (y:Int) => x + y
first: (x: Int)Int => Int
然后我們使用參數(shù)1調(diào)用這個函數(shù)來生成第二個函數(shù)。
scala> val second=first(1)
second: Int => Int =
scala> second(2)
res1: Int = 3
first,second的定義演示了柯里化函數(shù)的調(diào)用過程,它們本身和 curriedSum 沒有任何關(guān)系,但是我們可以使用 curriedSum 來定義 second,如下:
scala> val onePlus = curriedSum(1)
onePlus: Int => Int =
下劃線“
scala> onePlus(2)
res2: Int = 3
通過柯里化,你還可以定義多個類似 onePlus 的函數(shù),比如 twoPlus
scala> val twoPlus = curriedSum(2) _
twoPlus: Int => Int =
scala> twoPlus(2)
res3: Int = 4
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。