DAA*_*DAA 6 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
}
Run Code Online (Sandbox Code Playgroud)
我想使用when块而不是if else,但是我不知道如何执行值<VAR_A和值> VAR_C的值。
谢谢,对不起,我的英语!
您可能正在寻找的理想语法是
when (value) {
< valueA -> valueA
<= valueB -> valueB
<= valueC -> valueC
else -> valueD
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是不可能的,因为比较运算符是需要接收器的函数的运算符重载:
value < valueA
Run Code Online (Sandbox Code Playgroud)
是相同的
value.compareTo(valueA) < 0
Run Code Online (Sandbox Code Playgroud)
因为compareTo不是类似于isor 的关键字in(如zsmb13的答案中所使用),所以您需要创建以下代码when块:
when {
value < valueA -> valueA
value <= valueB -> valueB
value <= valueC -> valueC
else -> valueD
}
Run Code Online (Sandbox Code Playgroud)
科特林充满了美好的事物。您可以尝试一些根本不使用级联条件的替代解决方案。像你想在我看来value,以四舍五入到最接近的valueA,valueB,valueC,和valueD。因此,例如,替代方法可能是:
var variable = listOf(valueA, valueB, valueC, valueD).sorted().first { value <= it }
Run Code Online (Sandbox Code Playgroud)
这将选择比value集合更大的最接近值,并将其分配给variable。
例如,如果 0 < VAR_A< VAR_B<为真VAR_C,您可以这样做:
var variable = when (value) {
in 0..VAR_A -> valueA
in VAR_A..VAR_B -> valueB
in VAR_B..VAR_C -> valueC
else -> valueD
}
Run Code Online (Sandbox Code Playgroud)
when但也许这是此任务最清晰的形式:
var variable = when {
value <= VAR_A -> valueA
value <= VAR_B -> valueB
value <= VAR_C -> valueC
else -> valueD
}
Run Code Online (Sandbox Code Playgroud)
这应该是您的if表达式最简单的等效项:
var variable = when {
value < VAR_A -> valueA
value <= VAR_B -> valueB
value <= VAR_C -> valueC
else -> valueD
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |