8.2.12 闭包(Closure)
Lambda 表达式或者匿名函数,以及局部函数和对象表达式(object declarations)可以访问其 闭包,即在外部作用域中声明的变量。 与 Java 不同的是可以修改闭包中捕获的变量:
fun sumGTZero(c: Iterable<Int>): Int {
var sum = 0
c.filter { it > 0 }.forEach {
sum += it
}
return sum
}
val list = listOf(1, 2, 3, 4, 5)
sumGTZero(list) // 输出 15
我们再使用闭包来写一个使用Java中的Thread接口的例子:
fun closureDemo() {
Thread({
for (i in 1..10) {
println("I = $i")
Thread.sleep(1000)
}
}).start()
Thread({
for (j in 10..20) {
println("J = $j")
Thread.sleep(2000)
}
Thread.sleep(1000)
}).start()
}
一个输出:
I = 1
J = 10
I = 2
I = 3
...
J = 20
当前内容版权归 JackChan1999 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 JackChan1999 .