Loops 跳出kotlin中的for循环

Loops 跳出kotlin中的for循环,loops,for-loop,kotlin,break,Loops,For Loop,Kotlin,Break,我有一个简单的循环和条件,但你们看下面我不能跳出循环: rwloop@ for (z in rendered_words.size-1 downTo 0 ) { var css_=rendered_words[z].node.attr("class") css_?.let { if (css_=="classzero") {

我有一个简单的循环和条件,但你们看下面我不能跳出循环:

rwloop@ for (z in rendered_words.size-1 downTo 0 )
                {
                    var css_=rendered_words[z].node.attr("class")
                    css_?.let {
                        if (css_=="classzero") {
                            break@rwloop
                        }
                    }
                }
但是我在中收到了这个错误break@rwloop

“中断”或“继续”跨越函数或 阶级界限

它说

中断和继续在内联lambda中还不可用,但我们也计划支持它们

所以,你应该

  • 等到它的支持到来
  • 或者改用本地返回语句
  • 怎么做

    lambda本身就是一个函数,因此您可以从它返回,这(如果它是for循环中最后一个类似于您的情况)将产生与continue相同的效果

    rwloop@ for(z in rendered_words.size-1 downTo 0 ) {
        var css_=rendered_words[z].node.attr("class")
        css_?.let {
            if (css_=="classzero") {
                return@let
            }
        }
    }
    
    Kotlin将lambda视为一个边界(它不是一个内部类,因为它是内联的),因此直到现在您还不能通过
    中断
    继续
    来跨越它。

    它说

    中断和继续在内联lambda中还不可用,但我们也计划支持它们

    所以,你应该

  • 等到它的支持到来
  • 或者改用本地返回语句
  • 怎么做

    lambda本身就是一个函数,因此您可以从它返回,这(如果它是for循环中最后一个类似于您的情况)将产生与continue相同的效果

    rwloop@ for(z in rendered_words.size-1 downTo 0 ) {
        var css_=rendered_words[z].node.attr("class")
        css_?.let {
            if (css_=="classzero") {
                return@let
            }
        }
    }
    

    Kotlin将lambda视为一个边界(它不是一个内部类,因为它是内联的),因此直到现在您还不能通过
    break
    continue
    来跨越它。

    放弃let lambda,因为@rwloop标签在它内部不可见,请使用它:

            rwloop@ for (z in rendered_words.size-1 downTo 0 )
            {
                var css_=rendered_words[z].node.attr("class")
                if (css_ != null) {
                    if (css_=="classzero") {
                        break@rwloop
                    }
                }
            }
    

    删除let lambda,因为@rwloop标签在其内部不可见,请使用以下命令:

            rwloop@ for (z in rendered_words.size-1 downTo 0 )
            {
                var css_=rendered_words[z].node.attr("class")
                if (css_ != null) {
                    if (css_=="classzero") {
                        break@rwloop
                    }
                }
            }
    

    您应该能够摆脱
    let
    =
    表达式将转换为
    a?.equals(b):(b===null)
    您应该能够摆脱
    let
    =
    表达式将转换为
    a?.equals(b):(b===null)
    这是
    return@let
    但真的打破了循环吗?他不需要像运行blabla@{…css这样的东西吗。。。return@blabla}
    ?(或者,由于
    let
    在这段代码中似乎毫无意义,他可以摆脱它,正常使用
    break
    )。那
    return@let
    但真的打破了循环吗?他不需要像运行blabla@{…css这样的东西吗。。。return@blabla}
    ?(或者,由于
    let
    在这段代码中似乎毫无意义,他可以将其去掉,然后正常使用
    break
    )。您现在不需要标签<代码>中断
    自动匹配最里面的循环构造。@MarkoTopolnik True,但代码已经包含标签,所以我没有更改它。另外,我总是在Kotlin使用标签,以防万一……你现在不需要标签<代码>中断
    自动匹配最里面的循环构造。@MarkoTopolnik True,但代码已经包含标签,所以我没有更改它。另外,我总是在Kotlin中使用标签,以防万一。。。