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

迪拉里克

为什么不允许它continuelet功能?

此代码

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

甚至这段代码

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”或“ continue”跨越函数或类边界


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


请在此处为该功能投票https : //youtrack.jetbrains.com/issue/KT-1436

Tenfour04

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

breakcontinue不是内联lambda表达式尚未公布,但我们正计划支持他们。

return仅当lambda是内联lambda时才支持在lambda中使用裸(例如非本地)(因为否则,它不知道从其调用的上下文)。因此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.")
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能在Swift中使用let in协议?

为什么你不能在 Haskell 中使用没有 'let..in' 块的 'Just' 语法?

为什么我不能在 rxjs .let() 操作中使用“this”关键字?

为什么我们不能在打字稿中的类中使用let关键字

为什么不能在data.table中使用`predict`?

为什么复数文字不能在clang中使用?

为什么不能在表达式中使用...语法?

为什么notifyAll()不能在线程实例中使用?

为什么不能在 for 循环中使用类型提示?

为什么我不能在开关案例中使用枚举?

为什么不能在 if 语句中使用空指针?

为什么我不能在Swift中使用'object == nil'?

为什么我不能在CSS Variable中使用rgba?

为什么我不能在界面中使用默认方法?

为什么不能在函数中使用范围?

为什么不能在QLineEdit对象中使用StyleSheet?

为什么我不能在匿名类中使用<Class> .this?

为什么我不能在TRecord中使用Variable?

为什么我不能在列表中使用匿名函数?

为什么限制不能在拆分方法中使用?

为什么不能在分配中使用Unicode字符√和??

为什么不能在PowerShell中使用“查找”?

为什么不能在DELETE语句中使用别名?

为什么不能在递归函数中使用yield

为什么通配符不能在Elasticsearch中使用`@`?

为什么我不能在 Spark 中使用 combineByKey?

为什么我不能在Spark的mapPartitions中使用foreach

为什么不能在写入主机中使用$ _?

为什么我不能在Laravel中使用关系方法?