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 的类型。但这行不通。因此,如果您将其声明为 测试:有吗?你的代码会编译。