溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scala系列之柯里化

發布時間:2020-07-11 02:38:15 來源:網絡 閱讀:222 作者:wx5da18b5c4b01e 欄目:大數據

  Scala系列之柯里化,柯里化是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,
并且返回接受余下的參數而且返回結果的新函數的技術。
下面先給出一個普通的非柯里化的函數定義,實現一個加法函數:
scala> def plainOldSum(x:Int,y:Int) = x + y
plainOldSum: (x: Int, y: Int)Int
scala> plainOldSum(1,2)
res0: Int = 3
使用“柯里化”技術,把函數定義為多個參數列表:
scala> def curriedSum(x:Int)(y:Int) = x + y
curriedSum: (x: Int)(y: Int)Int
scala> curriedSum (1)(2)
res0: Int = 3
當你調用 curriedSum (1)(2)時,實際上是依次調用兩個普通函數(非柯里化函數),第一次調用使用一個參數 x,返回一個函數類型的值,第二次使用參數y調用這個函數類型的值,我們使用下面兩個分開的定義在模擬 curriedSum 柯里化函數:
首先定義第一個函數:
scala> def first(x:Int) = (y:Int) => x + y
first: (x: Int)Int => Int
然后我們使用參數1調用這個函數來生成第二個函數。
scala> val second=first(1)
second: Int => Int = <function1>
scala> second(2)
res1: Int = 3
first,second的定義演示了柯里化函數的調用過程,它們本身和 curriedSum 沒有任何關系,但是我們可以使用 curriedSum 來定義 second,如下:
scala> val onePlus = curriedSum(1)
onePlus: Int => Int = <function1>
下劃線“
” 作為第二參數列表的占位符, 這個定義的返回值為一個函數,當調用時會給調用的參數加一。
scala> onePlus(2)
res2: Int = 3
通過柯里化,你還可以定義多個類似 onePlus 的函數,比如 twoPlus
scala> val twoPlus = curriedSum(2) _
twoPlus: Int => Int = <function1>
scala> twoPlus(2)
res3: Int = 4
Scala系列之柯里化

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女