lambda表达式或匿名函数可以访问或修改其所在上下文中的变量和常量,这个过程被称为捕获。
fun main(args: array<string>) { //定义一个函数,该函数的返回值类型为()->list<string> fun makelist(ele: string): () -> list<string> { //创建一个不包含任何元素的list var list: mutablelist<string> = mutablelistof() fun addelement(): list<string> { //向list集合中添加一个元素 list.add(ele) return list } return ::addelement } }
上例中顶一个一个局部函数,这个局部函数可访问或修改其所在函数中的变量。
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**********
[关羽]
[关羽, 关羽]
总结
以上就是这篇文章的全部内容了,希望android开发分享Kotlin如何捕获上下文中的变量与常量详解的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对<计算机技术网(www.ctvol.com)!!>的支持。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/addevelopment/900845.html