很多,同学不理解闭包操作。其实,在很多“函数式编程语言”都会出现。Java8之后借鉴Scala也增加了闭包的概念, 在Java中,闭包是通过“接口+内部类”实现,JAVA的内部类也可以有匿名内部类。
通过,一个case来讲scala中的闭包,简单的理解就是:函数内部的变量不在其作用于时。也可以理解函数内部访问函数外的(局部变量),仍然可以从外部进行访问,听上去有些抽象;下面我们来通过一个简单的例子实现 Scala 中的闭包,代码如下:
def main(args: Array[String]): Unit = {
def addF(a: Int): Int => Int = {
def addF2(b: Int): Int = {
a + b
}
addF2
}
println(addF(1)(2))
}
输出结果:
3
Process finished with exit code 0
从内存模型来看的话,addF压栈->出栈->就会被回收掉,那么addF2函数再去使用addF的局部变量,就会使用不到。
那么,把两个函数封装到堆区域,addF2就可以使用到addF的局部变量,当前操作就叫闭包。