什么是函数柯里化?
最直接的说法:
函数柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
这个解释看上去有些难懂,下面让我们来举一个例子:
在java中我们可以定义这样一个简单的求和函数:
public int fun(int a,int b){
return a+b;
}
即使是java初学者也会知道:如果要调用这个函数,必须输入a和b两个int型的参数,缺一不可。否则就会报错。
但是在scala中,我们可以这样定义:
def fun1(a:Int)(b:Int):Int={
a+b
}
可以看到这里把a和b分别放在两个不同的括号里,但实现的功能好像也只是相加而已,并没有什么特别之处。
别急,接着看:
def fun2=fun1(1)(_)
val num1:Int=fun2(1)
println(num1)
运行结果:
这里可以看到:调用fun1方法时,直往里面放了一个实参"1",第二个参数用"_“表示空缺,然后就返回了一个新的函数fun2。
再调用fun2放入第二个实参"1”,然后才返回了"1+1"的结果。
所以,再调用fun1时如果没有把参数输入完整,不会报错,而是返回一个新的函数。
这也就是函数柯里化。