0%

scala闭包

scala闭包

闭包就是一个函数和与其相关的引用环境组成的一个整体

1
2
3
4
5
// minusNum函数体是一个匿名函数
def minusNum(num : Int) = (y:Int) => num-y
// 返回函数是一个对象,而 num 就是该对象的一个字段,他们共同形成一个闭包
// fun函数是一个闭包
val fun = minusNum(20)

能组成闭包的函数也是高阶函数,因为需要该函数返回一个函数,而在上例中

1
val fun = minusNum(20)

组成了一个闭包,所返回的函数本身是一个Function1对象

1
val fun:Function1[Int,Int] = minusNum(20)

在使用闭包时,需要清楚该函数对象引用了函数外的哪些变量,因为它们会组成一个整体,形成一个闭包

函数柯里化

在使用闭包时,可以看到其实所有的多参函数都可以写成这种闭包传单个参数的形式,而在函数编程中,接受多个参数的函数都可以转化为接受单个参数的函数,这个转化过程就是柯里化

如上述的示例,可以使用两个参数的函数来完成

1
2
3
4
5
6
def minus(num :Int,num1:Int) = {
num - num1
}

// 调用
minus(20,3)

也可以使用函数柯里化的方式

1
2
3
4
def minusNum(num : Int) = (y:Int) => num-y

// 调用
minusNum(20)(3)