Ich versuche, die WHEN
Klausel mit einem >
oder <
Vergleich zu verwenden.Verwenden Kotlin WHEN-Klausel für <, <=, > =,> Vergleiche
Dies wird nicht kompiliert. Gibt es eine Möglichkeit, den normalen Satz boolescher Operatoren (< < =,> =>) in einem Vergleich zu verwenden, um dies zu ermöglichen?
val foo = 2
// doesn't compile
when (foo) {
> 0 -> doSomethingWhenPositive()
0 -> doSomethingWhenZero()
< 0 -> doSomethingWhenNegative()
}
Ich habe versucht, einen unbegrenzten Bereich Vergleich zu finden, aber konnte dies auch nicht funktionieren? Ist es möglich, dies als unbegrenzten Bereich zu schreiben?
Sie können den gesamten Ausdruck in den zweiten Teil einfügen, was OK ist, aber scheint wie unnötige Duplizierung. Zumindest kompiliert und funktioniert es.
Aber ich bin nicht sicher, dass das einfacher ist als die if-else Alternative, die wir seit Jahren machen. Etwas wie:
if (foo > 0) {
doSomethingWhenPositive()
}
else if (foo < 0) {
doSomethingWhenNegative()
}
else {
doSomethingWhenZero()
}
Natürlich sind reale Probleme komplexer als die oben, und die WHEN
Klausel ist attraktiv, aber nicht funktioniert, wie ich für diese Art von Vergleich erwarten.
Es ist interessant, die Grammatik zu sehen. Also sieht der erste Ausdruck so aus, als müsste er ein Ausdruck sein, der den Booleschen Wert zurückgibt, was ich in meinem Beispiel verwendet habe, das kompiliert wurde. Ist das richtig. Der zweite Ausdruck mit der "in" -Klausel ist ein Ausdruck, der eine Art von Sammlung zurückgibt, und das "ist" ist einfach eine Typdeklaration. Recht? Wie auch immer, schätze den vollen Ausdruck für jeden Fall ist die sauberste Option hier. –