假设我有以下代码:
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 ?
来自规格:
与完全相同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()
}
...等等。