在Kotlin中跳出循环

时间:2018-08-04 07:10:48

标签: 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") {
                            break@rwloop
                        }
                    }
                }

但是我在 break @ rwloop 中收到此错误:

  

break'或'continue'跨功能或   类边界

2 个答案:

答案 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,但我们也计划为其提供支持。

所以,你应该

  1. 请耐心等待,直到获得支持
  2. 或者使用本地return语句,

如何?

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是一个边界(因为它是内联的,所以它不是内部类),因此到目前为止,您不能与breakcontinue交叉。