Относительно первого: глядя на 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()
}
но, как и следовало ожидать: это не так ... но последнее утверждениескорее примечание.