哗众取宠

让我们定义 2 个参数的函数:

def add: (Int, Int) => Int = (x,y) => x + y
val three = add(1,2) 

Currying add 将它转换为一个函数,它接受一个 Int 并返回一个函数 (从一个 Int 到一个 Int

val addCurried: (Int) => (Int => Int) = add2.curried
//               ^~~ take *one* Int
//                        ^~~~ return a *function* from Int to Int

val add1: Int => Int = addCurried(1)
val three: Int = add1(2)
val allInOneGo: Int = addCurried(1)(2)

你可以将此概念应用于任何带有多个参数的函数。假设一个带有多个参数的函数,将它转换为一系列带有一个参数的函数应用程序 :

def add3: (Int, Int, Int) => Int = (a,b,c) => a + b + c + d
def add3Curr: Int => (Int => (Int => Int)) = add3.curried

val x = add3Curr(1)(2)(42)