Идеальный синтаксис, который вы можете искать, это
when (value) {
< valueA -> valueA
<= valueB -> valueB
<= valueC -> valueC
else -> valueD
}
К сожалению, это невозможно, поскольку операторы сравнения являются перегрузками операторов для функций, требующих приемника:
value < valueA
совпадает с
value.compareTo(valueA) < 0
Поскольку compareTo
не является ключевым словом, подобным is
или in
(как используется в ответе zsmb13), вам необходимо создать этот блок when
:
when {
value < valueA -> valueA
value <= valueB -> valueB
value <= valueC -> valueC
else -> valueD
}
Котлин полон чудесных вещей. Вы могли бы придумать несколько альтернативных решений, которые вообще не используют условное каскадирование. Мне кажется, что вы хотите, чтобы value
округлился до ближайшего из valueA
, valueB
, valueC
и valueD
. Так, например, альтернативой может быть:
var variable = listOf(valueA, valueB, valueC, valueD).sorted().first { value <= it }
Это выберет ближайшее значение, большее, чем value
из набора, и присвоит его variable
.