首先看一个简单的案例:
//原函数 传入两个参数x,y 求和
def add(x:Int,y:Int)=x*y+y
//柯里化函数 每次传入一个参数,先传入x,再传入y 求和
def add1(x:Int)(y:Int)=x*y+y
//原函数调用
add(10,1) //11
//柯里化函数调用
add1(10)(1) //11
由此可见,柯里化函数就是把一次传入多个参数的函数拆分为每次都传入单个参数的函数,并且多次传入参。
那为什么add(x,y)变成add1(x)(y)就实现了柯里化呢?
函数柯里化(Currying):将原来接受多个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有函数的第二个参数为参数的函数。
add1(x)(y)怎么运作的?以add2函数做说明。
//实现创建add1的柯里化方法 传入第一个参数时返回函数类型,传入第二参数才返回计算值
def add2(x:Int)={
//新函数
(y:Int)=>{
x*y+y
}
}
add2(10) //function
add2(10)(1) //11
add2(x)返回的是一个函数,这个返回的函数参数是Int型,我们知道调用函数需要通过fun(参数)来实现,所以add2(x)(y)就是在add2(x)返回的新函数的基础上又传入参数y来调用新函数的。这就解释上面add1(x)(y)依次传入两个参数就实现柯里化。