The label does not denote a loop in forEach

風吹過wu發表於2019-01-12

這個是在kotlin中遍歷集合時,使用標籤的過程中,可能會遇到的小錯誤。

提示的字面上的資訊,就是在forEach中這個標籤不能表示為loop(也就是迴圈),錯誤事例如下:

list.forEach loop@{
      if (it == "外面還很黑") {
           continue @loop
       }
   }
複製程式碼

這裡使用continue,和break都會報錯。使用return就會正常了,讓我們看看原始碼:

/**
 * Performs the given [action] on each element.
 */
@kotlin.internal.HidesMembers
public inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {
    for (element in this) action(element)
}

複製程式碼

很明顯forEach是一個fun,並不是一個loop

那麼相對應的,在for 迴圈中使用return 也同樣會報錯。錯誤程式碼如下:

loop@ for (i in 0..4)  
               for (j in 5..9) {
                   if (j == 8) {
                       return@loop
                  }
           }
複製程式碼

這個時候編譯器會給一個warn:Target label does not denote a function

改正:我們可以使用continue,或者break,看你的實際情況來定

官方講解

Returns and Jumps

Kotlin has three structural jump expressions:

  • return. By default returns from the nearest enclosing function or anonymous function.
  • break. Terminates the nearest enclosing loop.
  • continue. Proceeds to the next step of the nearest enclosing loop.

我是翻譯二把刀,你們自己看吧 還想了解一下kotlin中的迴圈的,請走這邊blog.csdn.net/u010844304/…

相關文章