我发现在猫王方块下方的情况下被称为
实际上是指外部可空性检查
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/