Kotlin如何捕获上下文中的变量与常量详解

前端之家收集整理的这篇文章主要介绍了Kotlin如何捕获上下文中的变量与常量详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Lambda表达式或匿名函数可以访问或修改其所在上下文中的变量和常量,这个过程被称为捕获。

  1. fun main(args: Array<String>) {
  2. //定义一个函数,该函数的返回值类型为()->List<String>
  3. fun makeList(ele: String): () -> List<String> {
  4. //创建一个不包含任何元素的List
  5. var list: MutableList<String> = mutableListOf()
  6. fun addElement(): List<String> {
  7. //向list集合中添加一个元素
  8. list.add(ele)
  9. return list
  10. }
  11. return ::addElement
  12. }
  13. }

上例中顶一个一个局部函数,这个局部函数可访问或修改其所在函数中的变量。

Lambda表达式或匿名函数都会持有一个其所捕获的变量的副本,因此表面上看addElement()访问的是makeList()函数的list集合变量,但只要程序返回一个新的addElement()函数,addElement()函数就会持有一个新的list的副本。

Lambda表达式或匿名函数都会持有一个其所捕获的变量的副本,因此表面上看addElement()访问的是makeList()函数的list集合变量,只要程序返回一个新的addElement()函数,就会持有一个新的list的副本。

  1. fun main(args: Array<String>) {
  2. println("******add1返回的List**********")
  3. val add1 = makeList("刘备")
  4. println(add1())
  5. println(add1())
  6.  
  7. println("******add2返回的List**********")
  8. val add2 = makeList("关羽")
  9. println(add2())
  10. println(add2())
  11. }

输出结果:

******add1返回的List**********
[刘备]
[刘备,刘备]
******add2返回的List**********
[关羽]
[关羽,关羽]

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持

猜你在找的Android相关文章