对于函数闭包,可以结合面向对象来理解:
- 一个函数体就是一个对象
- 函数体里的函数就是对象的行为
- 函数体里的一个字段被多个函数引用,一个对象里的属性会被多个行为改变
- 函数体里的字段可以是函数,一个对象的行为可以被外界引用
下面是Scala的一个函数闭包
object FuncTest extends App {
var results = count
def count: List[() => Int] = {
var list = List[() => Int]()
var i = 1
1 to 3 foreach {
x => {
list = list.:: { () => i * i }
}
i += 1
}
list
}
results.foreach(x => println(x()))
}
//16
//16
//16