最佳答案
我试图使用 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
子句很有吸引力,但是不能像我期望的那样用于这种类型的比较。