当前位置: 首页 > 编程笔记 >

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

令狐嘉禧
2023-03-14
本文向大家介绍Kotlin如何捕获上下文中的变量与常量详解,包括了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**********
[关羽]
[关羽, 关羽]

总结

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

 类似资料:
  • 本文向大家介绍java中变量和常量详解,包括了java中变量和常量详解的使用技巧和注意事项,需要的朋友参考一下 变量和常量 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。 在实际的程序中,可以根据数据在程序运行中是否发生改变,来选择应该是使用变量代表还是常量代表。 变量 变量代表程序

  • 本文向大家介绍Swift中常量和变量的区别与声明详解,包括了Swift中常量和变量的区别与声明详解的使用技巧和注意事项,需要的朋友参考一下 Swift是弱类型语言吗? 答案是否定的,Swift 是强类型语言,下面上一个栗子 上面代码中报错了,报的是不能指定 Int 类型为 String 类型。 这里要注意一下在 Swift 中的整形是I,而字符类型首字母是S,都是大写字母 在 Swift 中我们可

  • 2.1.1 常量与变量 在程序中如何指明要处理的数据?所有编程语言都提供两种指明数据的方式:第一,直接用字面值(literal)表示数据,即从文本字面上即可看出是什么数据,这种数据是不会改 变的常量;第二,将数据存储在一个变量中,以后用该变量来指代数据。 回顾第 1 章中我们所写的第一个程序: >>> print "Hello World!" 其中"Hello World!"就是以字面值的形式指

  • 这将base64打印到控制台: 来源:https://stackoverflow.com/A/36281449/1063287 我希望能够将base64赋值给一个变量,所以我尝试了以下操作,基于这个答案: 它目前没有向控制台打印任何内容。 问题: 我正在提交一个表单在谷歌应用程序脚本环境。 我以前已经这样做了,并将一个表单对象(包括一个文件)传递给Google Apps脚本函数。 但是,这种方法的

  • 问题内容: 我正在使用以下代码使用nodejs和ssh2模块在Linux机器上重置密码: 我正在从另一个模块(如下所示的test.js)调用resetPassword密码功能。 但是console.log说“未定义”。尝试使用process.nextTick,但没有运气。请帮忙。 问题答案: 欢迎来到node.js中使用异步操作进行开发的世界。最初学习node.js时,这是一个非常常见的错误(也是

  • 问题内容: 我正在生成大量的XML,当用户单击表单按钮时,这些XML将作为发布变量传递到API。我还希望能够事先向用户显示XML。 该代码有点像以下结构: 我的XML正在生成一些while循环和其他内容。然后需要在两个位置(预览和表单值)中显示它。 我的问题是。我如何在变量中捕获生成的XML或其他内容,所以我只需要生成一次,然后将其打印出来就可以在预览中生成,然后在表单值中生成? 问题答案: