Kotlin Lambda的返回
先看下面这个代码,有问题不?
repeat(10) {
if (it == 3) break
println(it)
}
if (it == 3) break
println(it)
}
答案是编译通不过地。
- break,是loop的兄弟,只能在for, while这些地方使用
那如果我想从那里面跳出来,怎么破?先看下面这个
fun main(args: Array<String>) { repeat(10) { if (it == 3) return@repeat print(it) } println("hello") }
这段代码会输出:
012456789hello
看样子return@repeat起到了类似continue的作用,把3的打印跳过了。那如果我像下面这样直接return呢?
fun main(args: Array<String>) { repeat(10) { if (it == 3) return println(it) } println("hello") }
输出结果变成:
012
所以,如果只用return的话,会直接导致调用repeat的函数(main)直接return了。
思考......如果我就想像loop的break那样,从这些lambda里面跳出来而又不导致外部函数被return。换句话说,如果我想输出012hello, 那该如何破?且看下面这段:
fun main(args: Array<String>) { run loop@{ repeat(10) { if (it == 3) return@loop print(it) } } println("hello") }
所以,结论是只有通过在repeat的外层再包一层lambda并且设置上label,才能模拟出“break”的效果。
相关推荐
meylovezn 2020-09-21
mmmjyjy 2020-07-16
typhoonpython 2020-06-11
x青年欢乐多 2020-06-06
PythonMaker 2020-04-22
QianYanDai 2020-04-18
千锋 2020-04-11
SDUTACM 2020-03-05
fly00love 2020-03-05
f = lambda x, y, z: x + y + z # returns a function that can optionally be assigned a name. def func:
sschencn 2020-02-21
wklken的笔记 2020-01-30
GhostLWB 2020-01-30
sulindong0 2020-01-19
chinademon 2020-01-12
mieleizhi0 2020-01-11
samsai00 2020-01-06