使用when(subject) { ... }
表达式时是否可以提供多个 bool 条件?
以下不会编译
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")
}
我有很长的时间条件 list ,其中大多数仅使用隐式主题,但是有一些需要辅助条件
最佳答案
关于第一个:查看 when
grammar。直接只允许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
为false,因为num
甚至不是 bool 值;-)换句话说:将
when
中的“主题”与每个条件进行比较(感谢Bwvolleyball的注释)。但是我不太了解(但这也可能是我对语法的误解)...看一下语法,似乎以下情况是可能的:
when {
is Number -> TODO()
}
但正如人们所料想的那样:并非如此,但是最后一句话只是个旁注。