什么是柯里化函数
有多个参数列表 的函数就是柯里化函数,所谓的参数列表就是使用小括号括起来的函数参数列表, 函数柯里化就是 把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的过程。如下所示1
2
3
4
5// 非柯里化函数
def sum(x:Int,y:Int)=x+y
// 柯里化函数
def sum(x:Int)(y:Int) = x + y
实例如下:
sum(1)(2) 实际上是依次调用两个普通函数(非柯里化函数),第一次调用使用一个参数 x,返回一个函数类型的值,第二次使用参数y调用这个函数类型的值。
实质上最先演变成这样一个方法:1
def sum(x:Int)=(y:Int) => x+y
那么这个函数是什么意思呢? 接收一个x为参数,返回一个匿名函数,该匿名函数的定义是:接收一个Int型参数y,函数体为x+y.
柯里化的意义
柯里化的意义在于把多个参数的function等价转化成多个单参数function的级联,这样方便做lambda演算。 同时curry化对类型推演也有帮助,scala的类型推演是局部的,在同一个参数列表中后面的参数不能借助前面的参数类型进行推演,curry化以后,放在两个参数列表里,后面一个参数列表里的参数可以借助前面一个参数列表里的参数类型进行推演。这就是为什么 foldLeft这种函数的定义都是curry的形式。函数柯里化在提高函数适用性和延迟执行或者固定易变因素等方面有着重要的作用,加上scala语言本身就是推崇简洁编码,使得同样功能的函数在定义与转换的时候会更加灵活多样。