我发现从 kotlin 中的列表中删除一个when放置在里面的项目let需要添加一个else分支,我不明白为什么需要它。谁能解释一下?
请参阅以下示例。
有一个可为空的列表
val list = mutableListOf<Int?>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Run Code Online (Sandbox Code Playgroud)
我想在空检查后从列表中删除一个元素。使用let和when需要else分支的实现。
fun `remove element inside let and when`(random: Int) {
list[random]?.let {
when {
it > 4 -> list.remove(it)
else -> { //else branch required
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当我使用的元素从列表中when,但没有let的else分支不需要
fun `remove element inside when`(random: Int) {
when {
random > 4 -> list.remove(random)
//no else branch required
}
}
Run Code Online (Sandbox Code Playgroud)
当if被用来代替when在let该else分支也不需要
fun `remove element inside let and if `(random: Int) {
list[random]?.let {
if (it > 4) {
list.remove(it)
} //no else required
}
}
Run Code Online (Sandbox Code Playgroud)
最后,当操作是分支内部when的赋值时else也不需要
fun `modify element inside let and when`(random: Int) {
list[random]?.let {
when {
it > 4 -> list[random] = 10
//no else branch required
}
}
}
Run Code Online (Sandbox Code Playgroud)
它使用 kotlin 1.3.72 版进行了测试。
let 返回一个值,即使你不使用它。
现在默认情况下,kotlin 将最后一条语句作为返回值。因此,when表达式的值用作返回值。而这反过来又迫使它when变得枯燥乏味。
如果您只是尝试将 a 分配when给某个值,您可以观察到相同的行为。
val foo = when {
it > 4 -> list.remove(it)
else -> { //else branch required
}
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,因为你不需要结果,你可以使用 also
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |