为什么Kotlin中的标签未返回此代码

为什么Kotlin中的标签未返回此代码,kotlin,Kotlin,为什么此代码不会从ints2.forEach返回,但每次都会输出level1 xx==? 当我将标签let@设置为ints2.forEach时,没有区别 fun foo() { val ints = Array(5, {i->i}) ints.forEach let@ { println("level 1 $it ====") val ints2 = Array(3, {i->i}) ints2.forEach {

为什么此代码不会从
ints2.forEach返回,但每次都会输出
level1 xx==
? 当我将标签
let@
设置为
ints2.forEach
时,没有区别

fun foo() {
    val ints = Array(5, {i->i})
    ints.forEach let@ {
        println("level 1 $it ====")
        val ints2 = Array(3, {i->i})
        ints2.forEach {
            if (it == 2) return@let
            println("level 2 $it")
        }
    }
}

fun main(args: Array<String>) {
    foo()
}
fun foo(){
val ints=Array(5,{i->i})
ints.forEach let@{
println(“级别1$it==”)
val ints2=数组(3,{i->i})
ints2.forEach{
如果(it==2)return@let
println(“2级$it”)
}
}
}
趣味主线(args:Array){
foo()
}
为什么此代码不从ints.forEach返回并将多次输出“level 1 xx==”

通过返回标签(
@let
,在您的例子中),它只从
forEach
中的lambda表达式返回。因此,您的
foo()
相当于下面的代码(使用匿名函数而不是标签)。这就是为什么仍然会为数组中的每个值执行
forEach
块的原因。你可以找到更多的细节

当我将标签“let@”设置为 ints2.forEach

原因同上。通过将
@let
标签设置为
ints2.forEach
,此内部
forEach
块仍在
it==2
之前执行两次

为什么此代码不从ints.forEach返回并将多次输出“level 1 xx==”

通过返回标签(
@let
,在您的例子中),它只从
forEach
中的lambda表达式返回。因此,您的
foo()
相当于下面的代码(使用匿名函数而不是标签)。这就是为什么仍然会为数组中的每个值执行
forEach
块的原因。你可以找到更多的细节

当我将标签“let@”设置为 ints2.forEach


原因同上。通过将
@let
标签设置为
ints2.forEach
,此内部
forEach
块仍在
it==2
之前执行两次

你能粘贴预期的输出吗?我没有完全理解你的问题。你能粘贴预期的输出吗?我没有完全理解你的问题
fun foo() {
    val ints = Array(5, {i->i})
    ints.forEach(fun(it: Int) {
        println("level 1 $it ====")
        val ints2 = Array(3, {i->i})
        ints2.forEach {
            if (it == 2) return
            println("level 2 $it")
        }
    })
}