闭包:如果一个函数,访问到了它的外部(局部)变量的值,那么这个函数和他所处的环境,称为闭包
通过闭包实现一个通用的两数相加函数
这里内层函数访问了外层函数的参数
在调用时,外层函数执行完毕后,局部变量 a 应该随着栈空间释放掉
但是在此处,变量 a 其实并没有释放,而是包含在了内层函数的内部,形
成了闭合的效果
object Lambda {
def main(args: Array[String]): Unit = {
def add(a: Int): Int => Int = {
def add(b: Int): Int = {
a + b
}
add
}
println(add(42)(61))
}
}
简化
object Lambda {
def main(args: Array[String]): Unit = {
//lambda表达式简化
def add(a: Int): Int => Int = {
b => a + b
}
def add1(a: Int): Int => Int = a + _
println(add(42)(61))
println(add1(42)(61))
}
}
如果对lambda不够熟悉,是不是还是有点复杂,没关系,下面还可以通过柯里化继续简化
柯里化
函数柯里化,其实就是将复杂的参数逻辑变得简单化,函数柯里化一定存
在闭包
object Lambda {
def main(args: Array[String]): Unit = {
def addCurrying(a: Int)(b: Int): Int = {
a + b
}
println(addCurrying(22)(23))
}
}