kotlin中跳出for循环

Jump out of for loop in kotlin

我有这个简单的循环和条件,但是你看下面我无法跳出循环:

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 收到这个错误:

break' or 'continue' jumps across a function or a class boundary

https://kotlinlang.org/docs/reference/inline-functions.html#non-local-returns

它指出

break and continue are not yet available in inlined lambdas, but we are planning to support them too.

所以,你应该

  1. 等到它的支持到来
  2. 或使用本地return语句代替,

如何?

lambda 本身就是一个函数,因此您可以从中 return,这(如果它像您的情况一样是 for 循环中的最后一件事)将产生与 continue[=15= 相同的效果]

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 视为边界(它不是内部 class 因为它是内联的),所以你不能通过 breakcontinue 到现在.

删除 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
                }
            }
        }