📜  Kotlin 关闭

📅  最后修改于: 2022-05-13 01:54:40.370000             🧑  作者: Mango

Kotlin 关闭

根据 Kotlin 的官方文档,“闭包是一种特殊的对象,它结合了两件事:一个函数,以及创建该函数的环境。环境由创建闭包时范围内的任何局部变量组成”

var sum = 0
ints.filter { it > 0 }.forEach {
    sum += it
}
print(sum)
  • 函数式编程中的闭包是知道其周围环境的函数 在这里,我的意思是闭包函数可以访问外部范围中定义的变量和参数。
  • 请记住,在Java和传统的过程式编程中,变量与作用域相关联,一旦块被执行,本地属性就会从内存中溢出。
  • Java 8 lambda 可以访问外部变量,但不能修改它们,如果您尝试在Java 8 中进行函数式编程,这会限制功能。
  • 让我们看一个在 Kotlin 中使用闭包的示例。

例子

在此示例中,我们将简单地创建一个整数数组并计算其总和:

Kotlin
fun main (args: Array) {
  sum=0
  var listOfInteger= arrayOf (0, 1, 2, 3, 4, 5, 6, 7)
  listOfInteger.forEach {
    sum+=it
    println (sum)
  }
}


Kotlin
var containsNegative = false
val ints = listOf(0, 1, 2, 3, 4, 5)
ints.forEach {
  if (it < 0)
  containsNegative = true
}


输出:

28 

在前面的例子中,sum 变量是在外部范围内定义的;尽管如此,我们仍然可以访问和修改它。

闭包也可以改变它们已经关闭的变量

科特林

var containsNegative = false
val ints = listOf(0, 1, 2, 3, 4, 5)
ints.forEach {
  if (it < 0)
  containsNegative = true
}

非常简单,这段代码关闭了一个局部变量containsNegative ,如果在列表中找到负值,则将其设置为 true。在现实世界中,您会为此使用内置函数this 而不是 this 函数,但它表明如何从函数字面量内部更新 vars 。

如何在 Kotlin 中创建一个闭包,它接受任何类型的参数并给出任何类型的变量作为返回值?

问题在于 test: Int of foo:

val foo = { test: Int -> "Just Testing $test" }

foo要求test是一个 Int。如果您使用Any类型的参数调用foo ?它可能是 null 或类似 String 的类型。但这行不通。因此,如果您将其声明为 测试:有吗?你的代码会编译。