Lambda表达式或匿名函数可以访问或修改其所在上下文中的变量和常量,这个过程被称为捕获。
上例中顶一个一个局部函数,这个局部函数可访问或修改其所在函数中的变量。
Lambda表达式或匿名函数都会持有一个其所捕获的变量的副本,因此表面上看addElement()访问的是makeList()函数的list集合变量,但只要程序返回一个新的addElement()函数,addElement()函数就会持有一个新的list的副本。
Lambda表达式或匿名函数都会持有一个其所捕获的变量的副本,因此表面上看addElement()访问的是makeList()函数的list集合变量,只要程序返回一个新的addElement()函数,就会持有一个新的list的副本。
- fun main(args: Array<String>) {
- println("******add1返回的List**********")
- val add1 = makeList("刘备")
- println(add1())
- println(add1())
- println("******add2返回的List**********")
- val add2 = makeList("关羽")
- println(add2())
- println(add2())
- }
输出结果:
******add1返回的List**********
[刘备]
[刘备,刘备]
******add2返回的List**********
[关羽]
[关羽,关羽]
总结