我从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块而不是if else,但我不知道怎么做值&lt; VAR_A和值&gt; VAR_C个。
谢谢你,对不起我的英语!
答案 0 :(得分:6)
您可能正在寻找的理想语法是
when (value) {
< valueA -> valueA
<= valueB -> valueB
<= valueC -> valueC
else -> valueD
}
不幸的是,这是不可能的,因为需要接收器的函数comparison operators are operator overloads:
value < valueA
与
相同value.compareTo(valueA) < 0
由于compareTo
不是像is
或in
这样的关键字(在zsmb13的回答中使用),您需要创建此when
块:
when {
value < valueA -> valueA
value <= valueB -> valueB
value <= valueC -> valueC
else -> valueD
}
Kotlin充满了美好的事物。您可以冒险尝试一些不使用级联条件的替代解决方案。在我看来,您希望value
向上舍入到最近的valueA
,valueB
,valueC
和valueD
。因此,例如,替代方案可能是:
var variable = listOf(valueA, valueB, valueC, valueD).sorted().first { value <= it }
这将从集合中选择大于value
的最接近的值,并将其分配给variable
。
答案 1 :(得分:4)
这应该是您{%url%}
表达式的最简单的等价物:
if
答案 2 :(得分:2)
例如,如果0 <&lt; 0&lt; 0&lt; 0 VAR_A
&lt; VAR_B
&lt; 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
}
但也许这是when
最易读的形式:
var variable = when {
value <= VAR_A -> valueA
value <= VAR_B -> valueB
value <= VAR_C -> valueC
else -> valueD
}