说明:
闭包是函数式编程的标配,如果一个函数,访问到了它的外部变量的值,那么这个函数和他所处的环境,成为闭包。
函数柯里化:把一个参数列表的多个参数,变成多个参数列表。
案例:
def main(args: Array[String]): Unit = {
def f1()={
var a:Int = 10
def f2(b:Int)={
a + b
}
f2 _
}
}
def main(args: Array[String]): Unit = {
def f1()={
var a:Int = 10
def f2(b:Int)={
a + b
}
f2 _
}
//执行f1函数返回f2,将返回的f2赋值给f变量
val f: Int => Int = f1()
//闭包,内层函数f2要访问外层函数的变量a,
// 当外层函数f1执行结束之后,f1会释放栈内存,但是会自动延长f1函数的生命周期
//和内层函数f2形成一个闭合的效果
//闭包 = 外层函数的局部变量 + 内层函数
println(f(3))
//println(f1()(3))
//上述代码也可以转换成以下代码
def f3()={
var a:Int = 10
(b:Int)=>a+b
}
println(f3()(3))
}
上述案例柯里化
//将一个函数的一个参数列表中的多个参数,拆分成多个参数列表
//简化闭包代码的编写
def main(args: Array[String]): Unit = {
def f4()(b:Int):Int={
var a:Int = 10
a+b
}
println(f4()(3))
//f4函数在执行的时候,会转换成上述的闭包结构
}