android - Kotlin:将 'cascade if' 替换为 'when' 与其他变量进行比较

标签 android if-statement kotlin

我从 Kotlin 开始,但遇到了一个问题。 我有三个常量(我们称它们为 VAL_A、VAL_B 和 VAL_C),我正在做这个赋值:

var variable = if (value < VAR_A) {
            valueA
        } else if (value <= VAR_B) {
            valueB
        } else if (value <= VAR_C) {
            valueC
        } else {
            valueD
        }

我想使用 when block 而不是 if else,但我不知道如何处理 value < VAR_A 和 value > VAR_C 。

谢谢你,对不起我的英语!

最佳答案

您可能正在寻找的理想语法是

when (value) {
    < valueA -> valueA
    <= valueB -> valueB
    <= valueC -> valueC
    else -> valueD
}

很遗憾,这是不可能的,因为 comparison operators are operator overloads对于需要接收器的功能:

value < valueA

相同
value.compareTo(valueA) < 0

因为 compareTo 不是 isin 之类的关键字(如 zsmb13 的回答中所用),您需要创建此 block :

when {
    value < valueA -> valueA
    value <= valueB -> valueB
    value <= valueC -> valueC
    else -> valueD
}

Kotlin 充满了奇妙的东西。您可以冒险尝试一些根本不使用级联条件的替代解决方案。在我看来,您希望 value 向上舍入到最接近的 valueAvalueBvalueC值D。因此,例如,替代方案可能是:

var variable = listOf(valueA, valueB, valueC, valueD).sorted().first { value <= it }

这将从集合中选择大于 value 的最接近的值并将其分配给 variable

关于android - Kotlin:将 'cascade if' 替换为 'when' 与其他变量进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50162667/

相关文章:

android - Robolectric 等待网络响应

android - 在后台使用通知数据

if-statement - 在 pandas 中使用 If/Truth 语句

javascript - 如果输入值等于Div的ID,则显示它

android - 将 RecycleRview 适配器连接到 fragment 时缺少参数

android - 平板电脑设计的谷歌开发者控制台优化技巧(minSdkVersion)

java - 从字符串中删除除最后 n 个字符之外的所有字符

java - if else vs switch java中的性能

kotlin - 数据类中的改造响应 null

Kotlin + Mockito : getting a null