我有这个简单的循环和条件,但是您在下面看到我无法跳出循环:
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'或'continue'跨功能或 类边界
答案 0 :(得分:3)
因为@rwloop标签在其中不可见,所以将其放出let lambda并使用它:
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
}
}
}
答案 1 :(得分:1)
https://kotlinlang.org/docs/reference/inline-functions.html#non-local-returns
声明
内联Lambda尚不提供break and Continue,但我们也计划为其提供支持。
所以,你应该
如何?
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
交叉。