我是 Kotlin 編程的新手,對從 lambda 回傳一些東西感到困惑。我想我最了解,但以下代碼確實給我帶來了問題。
當它被寫入時,if(it==0) return@forEach它應該意味著從 forEach 回圈中回傳。或者換句話說,退出 forEach 回圈。但它仍然繼續檢查串列中的剩余專案。
這是我正在關注的代碼
fun main(args: Array<String>) {
val listOf10 = listOf(2, 4, 0, 9, 8)
listOf10.forEach {
if (it == 0) return@forEach
println(it)
}
}
預期的輸出是2,4但它給出了2,4,9,8. 這里有人可以幫我解決這個問題嗎?
謝謝
uj5u.com熱心網友回復:
傳遞給forEach函式的 lambda 會為迭代中的每個專案重復呼叫,因此如果您提前從 lambda 回傳,您只會從 lambda 的迭代呼叫中回傳。
您可以使用run作用域函式 lambda上的標簽跳出該函式,但它很笨拙:
run {
listOf10.forEach {
if (it == 0) return@run
println(it)
}
}
通常,您不應該對此有太多需要,因為forEach它旨在添加到函式呼叫鏈的末尾。當您只想直接從變數進行迭代時,您應該使用傳統的 for 回圈。請參閱Kotlin 編碼約定中的此處。例如:
for (it in listOf10) {
if (it == 0) break
println(it)
}
當您處理一系列函式呼叫時,您通常使用其他運算子來控制/過濾您想要迭代的內容,并forEach在過濾后在最后添加一個呼叫。例如:
listOf10.takeWhile { it != 0 }
.forEach { println(it) }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/354355.html
上一篇:使用rxSwift的UItableViewcell中的UIcollectionView失敗
下一篇:參考在函式中擴展此類的類
