溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Scala柯里化是什么

發(fā)布時(shí)間:2021-12-08 17:15:19 來源:億速云 閱讀:128 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“Scala柯里化是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Scala柯里化是什么”吧!

柯里化是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù),并且返回接受余下的參數(shù)而且返回結(jié)果的新函數(shù)的技術(shù)。

下面先給出一個(gè)普通的非柯里化的函數(shù)定義,實(shí)現(xiàn)一個(gè)加法函數(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ù)定義為多個(gè)參數(shù)列表:

scala> def curriedSum(x:Int)(y:Int) = x + y
curriedSum: (x: Int)(y: Int)Int
scala> curriedSum (1)(2)
res0: Int = 3

當(dāng)你調(diào)用 curriedSum (1)(2)時(shí),實(shí)際上是依次調(diào)用兩個(gè)普通函數(shù)(非柯里化函數(shù)),第一次調(diào)用使用一個(gè)參數(shù) x,返回一個(gè)函數(shù)類型的值,第二次使用參數(shù)y調(diào)用這個(gè)函數(shù)類型的值,我們使用下面兩個(gè)分開的定義在模擬 curriedSum 柯里化函數(shù):

首先定義第一個(gè)函數(shù):

scala> def first(x:Int) = (y:Int) => x + y
first: (x: Int)Int => Int

然后我們使用參數(shù)1調(diào)用這個(gè)函數(shù)來生成第二個(gè)函數(shù)。

scala> val second=first(1)
second: Int => Int = <function1>
scala> second(2)
res1: Int = 3

first,second的定義演示了柯里化函數(shù)的調(diào)用過程,它們本身和 curriedSum 沒有任何關(guān)系,但是我們可以使用 curriedSum 來定義 second,如下:

scala> val >
onePlus: Int => Int = <function1>

下劃線“_” 作為第二參數(shù)列表的占位符, 這個(gè)定義的返回值為一個(gè)函數(shù),當(dāng)調(diào)用時(shí)會(huì)給調(diào)用的參數(shù)加一。

scala> onePlus(2)
res2: Int = 3

通過柯里化,你還可以定義多個(gè)類似 onePlus 的函數(shù),比如 twoPlus

scala> val twoPlus = curriedSum(2) _
twoPlus: Int => Int = <function1>
scala> twoPlus(2)
res3: Int = 4

Scala柯里化是什么

感謝各位的閱讀,以上就是“Scala柯里化是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Scala柯里化是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI