kotlin - Kotlin,执行嵌套的可空性检查时调用了错误的Elvis语句

标签 kotlin

我发现在猫王方块下方的情况下被称为
实际上是指外部可空性检查

val outer : String? = ""
val inner : String? = null

outer?.let {
    inner?.let {
        // do something
    }
} ?: System.out.println("Outer else")

Outer else



将Elvis分支添加到内部可空性检查中的行为符合预期:
outer?.let {
    inner?.let {
        // do something
    } ?: System.out.println("Inner else")
} ?: System.out.println("Outer else")

Inner else



它是Kotlin的错误吗?

最佳答案

该代码的行为符合预期。在您的情况下,?:运算符的左侧操作数为

outer?.let {
    inner?.let {
        // do something
    }
}
outer不为null,因此将执行外部let块。 inner为null,因此将不调用第二个let,并且外部块的返回值为null。这使得整个表达式的计算结果为null,因此?:运算符的右侧操作数被执行。

在第二个示例中,外部块的值计算为
inner?.let {
    // do something
} ?: System.out.println("Inner else")

由于inner为null,因此会调用?:的右侧操作数,并将其求值为Unit,这是外部块的值。

关于kotlin - Kotlin,执行嵌套的可空性检查时调用了错误的Elvis语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55175041/

相关文章:

android - Kotlin 是否有办法将接口(interface)的实现委托(delegate)给另一个类?

android - 如何编写扩展程序以在 Kotlin 中追加字符串?

android - Kotlin Flow 并行执行两个 API 调用并在每个结果到达时收集它

android - Kotlin Room 数据库单例模式

android-studio - Intellij IDEA (Android Studio) Kotlin 插件的用途是什么?

kotlin - 获取任务的属性?在 Gradle Kotlin

安卓录像机: failed to get surface

kotlin - 忽略for循环中的循环常数

Android Studio 不断显示缺少权限,即使我正在明确处理它。我如何解决它?

javascript - Kotlin 和 Firebase 云函数 update() 方法