Kotlin Elvis 运算符用法

问题描述 投票:0回答:1

假设我有以下代码:

fun main() {
    val userName: String? = "Dmitry" // line 1
    userName?.takeLast(2)?.reversed() // line 2
    userName?.plus("kotlin").plus("lang") // line 3
}

我无法理解之前使用 Elvis 操作符的原因

reversed()
- 为什么不能只使用
.
?正如我在文档中看到的,
takeLast()
总是提供
String
,而不是
String?
。在我的示例中,相同的场景适用于第 3 行 ->
plus()
始终返回 String,因此在第二个
plus()
之前不需要 Elvis ?

kotlin
1个回答
0
投票

来自规格

a?.c

完全相同
when (val $tmp = a) {
    null -> null
    else -> { $tmp.c }
}

换句话说,

userName?.takeLast(2)?.reversed()
等同于:

val $tmp1: String? = when (userName) {
    null -> null
    else -> $tmp.takeLast(2)
}
val $tmp2: String? = when ($tmp1) {
    null -> null
    else -> $tmp1.reversed()
}

...等等。

© www.soinside.com 2019 - 2024. All rights reserved.