小编给大家分享一下Kotlin怎么捕获上下文中的变量与常量,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
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**********
[关羽]
[关羽, 关羽]
看完了这篇文章,相信你对“Kotlin怎么捕获上下文中的变量与常量”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。