Kotlin如何捕获上下文中的变量与常量详解
2020-02-13 12:33
495 查看
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**********
[关羽]
[关羽, 关羽]
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
相关文章推荐
- [SqlException (0x80131904): 在此上下文中不允许使用名称 "XXX"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。]
- php基础详解之变量,常量,数据类型,类型转换,运算符,分支与循环
- Kotlin开发Android(2): Kotlin声明变量常量方法等基本语法
- R语言利用loess如何去除某个变量对数据的影响详解
- 【转载】const用法详解,如何修饰变量,返回值以及成员函数
- PHP如何释放内存之unset销毁变量并释放内存详解
- [SqlException (0x80131904): 在此上下文中不允许使用名称 "XXX"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。]
- 常量、变量、数据类型以及进制的详解(2)
- Kotlin入门篇(一),基本数据类型介绍、变量和常量的声明
- Kotlin利用Regex如何构建正则表达式详解
- PHP 如何给常量赋值变量
- 2018/01/08JAVA 基础 / 接口与继承 / JAVA的修饰符FINAL详解:final修饰类、方法、基本变量、引用、常量
- Swift中常量和变量的区别与声明详解
- Kotlin如何使用类似C#的yield功能详解
- Kotlin中的handler如何避免内存泄漏详解
- 2.2常量+变量详解+变量传值+数据类型
- 错误提示: 在此上下文中不允许使用名称 "XXX"。有效表达式包括常量、 常量表达式和变量(在某些上下文中)。不允许使用列名。
- Swift 常量与变量实例详解
- 详解Java变量与常量
- 插入数据库错误提示:有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。