Поддерживает ли выражение «когда» Kotlin несколько условий при использовании субъекта? - PullRequest
0 голосов
/ 28 сентября 2018

Можно ли предоставить несколько логических условий при использовании выражения when(subject) { ... }?

Следующее не скомпилирует

val num: Any = 2
when(num) {
    // uses implicit subject in addition to an unrelated condition
    is Number && true -> println("TRUE")
    else -> println("FALSE")
}

Следующее скомпилируется, но в результате получится FALSE,Это ожидаемое поведение?

val num: Any = 2
when(num) {
    num is Number && true -> println("TRUE")
    else -> println("FALSE")
}

У меня длинный список , когда условия, и большинство из них используют только неявный субъект, но пара нуждается во вторичных условиях

1 Ответ

0 голосов
/ 28 сентября 2018

Относительно первого: глядя на when грамматику , она предназначена.Только in и is (и их отрицательные аналоги) разрешены напрямую.В противном случае у вас есть только выражения.

Теперь, что касается вашего второго выражения, может помочь сначала преобразовать его в if / else.По сути, ваш when будет выглядеть следующим образом:

if (num == ((num is Number) && true)) println("TRUE")
else println("FALSE")

Если посмотреть на это, станет понятно, почему он всегда печатает FALSE.В то время как num is Number становится true, а true && true по-прежнему true, num == true является ложным, поскольку num даже не является логическим; -)

Или другими словами: ваш "Тема "в when сравнивается с каждым из условий (спасибо Bwvolleyball за комментарий).


Что, однако, я не очень понимаю (но это также можетбудь моим неправильным пониманием грамматики) ... глядя на грамматику, кажется, что возможно следующее:

when {
  is Number -> TODO()
}

но, как и следовало ожидать: это не так ... но последнее утверждениескорее примечание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...