Я пытаюсь использовать предложение WHEN
с помощью сравнения >
или <
.
Это не компилируется. Есть ли способ использовать нормальный набор булевых операторов (< < =, >= > ) в сравнении, чтобы включить это?
val foo = 2
// doesn't compile
when (foo) {
> 0 -> doSomethingWhenPositive()
0 -> doSomethingWhenZero()
< 0 -> doSomethingWhenNegative()
}
Я пытался найти неограниченное сравнение диапазона, но не мог сделать эту работу тоже? Можно ли записать это как неограниченный диапазон?
// trying to get an unbounded range - doesn't compile
when (foo) {
in 1.. -> doSomethingWhenPositive()
else -> doSomethingElse()
}
Вы можете поместить все выражение во вторую часть, что нормально, но похоже на ненужное дублирование. По крайней мере, он компилируется и работает.
when {
foo > 0 -> doSomethingWhenPositive()
foo < 0 -> doSomethingWhenNegative()
else -> doSomethingWhenZero()
}
Но я не уверен, что это проще, чем альтернатива if-else, которую мы делали годами. Что-то вроде:
if ( foo > 0 ) {
doSomethingWhenPositive()
}
else if (foo < 0) {
doSomethingWhenNegative()
}
else {
doSomethingWhenZero()
}
Конечно, проблемы в реальном мире сложнее, чем выше, а предложение WHEN
привлекательно, но не работает, как я ожидаю для такого типа сравнения.