Stranger 2020-05-16
答案是编译通不过地。
那如果我想从那里面跳出来,怎么破?先看下面这个
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”的效果。
f = lambda x, y, z: x + y + z # returns a function that can optionally be assigned a name. def func: