gpt4 book ai didi

kotlin - 为什么不能在let或run中使用continue

转载 作者:行者123 更新时间:2023-12-02 11:54:33 29 4
gpt4 key购买 nike

为什么不允许从continue函数进行let

This code:

fun foo(elements: List<String?>) {
for (element in elements) {
element?.let {
continue // error: 'break' or 'continue' jumps across a function or a class boundary
}
}
}

甚至 this code:
fun foo(elements: List<String?>) {
loop@ for (element in elements) {
element?.let {
continue@loop // error: 'break' or 'continue' jumps across a function or a class boundary
}
}
}

没有编译错误:

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



我知道在这种特殊情况下,我可以使用 filterNotNull或通过智能转换进行手动检查,但是我的问题是 ,为什么在这里不允许使用 continue

请在此处对此功能进行投票: https://youtrack.jetbrains.com/issue/KT-1436

最佳答案

这些将称为“非本地”中断并继续。根据documentation:

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



仅当Lambda是内联Lambda时,才支持在Lambda中使用裸露(例如非本地)的 return(因为否则它不了解从其调用的上下文)。因此,应该能够支持 breakcontinue。我不知道该功能被延迟的原因。

注意,在循环内或循环外,都可以通过 run来解决这两种情况,并且要利用以下事实:内联函数至少支持非本地返回。
fun foo(elements: List<String?>) {
run {
for (element in elements) {
element?.let {
println("Non-null value found in list.")
return@run // breaks the loop
}
}
}
println("Finished checking list")
}

fun bar(elements: List<String?>) {
for (element in elements) {
run {
element?.let {
return@run // continues the loop
}
println("Element is a null value.")
}
}
}

关于kotlin - 为什么不能在let或run中使用continue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62182565/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com