一、概念
柯里化(currying, 以邏輯學家Haskell Brooks Curry的名字命名)指的是將原來接受兩個參數的函數變成新的接受一個參數的函數的過程。新的函數返回一個以原有第二個參數作為參數的函數。 在Scala中方法和函數有細微的差別,通常編譯器會自動完成方法到函數的轉換。
二、Scala中柯里化的形式
Scala中柯里化方法的定義形式和普通方法類似,區別在於柯里化方法擁有多組參數列表,每組參數用圓括號括起來,例如:
mysum方法擁有兩組參數,分別是(x: Int)和(y: Int)。
mysum方法對應的柯里化函數類型是:
Int => Int = >Int
柯里化函數的類型聲明是右結合的,即上面的類型等價於:
Int => (Int = >Int)
表明該函數若只接受一個Int參數,則返回一個Int => Int類型的函數,這也和柯里化的過程相吻合。
三、示例
上面的代碼定義了一個柯里化方法,在Scala中可以直接操縱函數,但是不能直接操縱方法,所以在使用柯里化方法前,需要將其轉換成柯里化函數。最簡單的方式是使用編譯器提供的語法糖:
使用Scala中的部分應用函數(partially applied function)技巧也可以實現轉換,但是請注意轉后后得到的並不是柯里化函數,而是一個接受兩個(而不是兩組)參數的普通函數
傳入一個參數
即一個接受一個Int參數返回Int類型的函數。 繼續傳入第2個參數:
兩組參數都已經傳入,返回一個Int類型結果