首页 > 解决方案 > 如何在 Kotlin 中使用 WHEN 表达式?

问题描述

我在https://kotlinlang.org/docs/reference/control-flow.html中看到了这个片段

when (x) {
    parseInt(s) -> print("s encodes x")
    else -> print("s does not encode x")
}

我很困惑,不知道是第一种情况x.parseInt(s)还是其他情况。

我问的原因是因为,我尝试了以下

when(myString)) {
    isNullOrBlank() -> removeValue()
    else -> setValue(myString)
}

它失败了isNullOrBlack()

我尝试了以下也失败了。

when(myString)) {
    it.isNullOrBlank() -> removeValue()
    else -> setValue(it)
}

标签: kotlin

解决方案


第一种情况是检查是否x等于调用的结果parseInt(x),这不是 的函数x

任何作为表达式求值的 case 都会检查是否与x. 没有办法创建在 when 语句的目标上调用函数并且如果它返回 true 则通过的情况。使用目标时,您唯一的选择是检查它的相等性,检查它是否是in某物,或者检查它是否是is某物。

要执行您正在尝试的操作,您需要一个没有目标的 when 语句。

when {
    myString.isNullOrBlank() -> removeValue()
    else -> setValue(myString)
}


推荐阅读