kotlin - 如何在Kotlin中将WHEN用于表达式?

标签 kotlin

我在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)
}

最佳答案

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

将计算为表达式的任何大小写与x进行相等性检查。无法创建一种情况,您需要在when语句的目标上调用一个函数,如果该函数返回true,则该函数通过。使用目标时,您唯一的选择是检查其相等性,检查它是否是in或检查它是否是is

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

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

关于kotlin - 如何在Kotlin中将WHEN用于表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61134251/

相关文章:

android - 为什么我不能在 Kotlin 中将字符串 "20L"转换为 Long?

android - 如何将两个可变实时数据的结果合二为一

kotlin - 使ObjectBox与LiveData和Kotlin一起使用

kotlin - 为什么 Swagger 不检测可选的 JSON 属性?

android - Kotlin 中的 Dagger 2 Unresolved reference DaggerXXXSub

gradle - 尝试将木材添加到Kotlin项目中会导致多个 'Unable to resolve dependency for…' Gradle错误

android - 如何检查设备是否支持 BiometricPrompt 的人脸身份验证

android - 指定为非空的参数为空 - 在 Kotlin 中加载图像

kotlin - 在 Kotlin 多平台多模块项目中使用 Gradle 6.5 链接依赖项

kotlin - TornadoFX 加载多个 FXML 文件