是否可以在 when(subject) { ... }
中提供复合 bool 表达式?堵塞?
以下不会编译
val num: Any = 2
when(num) {
/* compound boolean expression that uses implicit subject expression
* and an independent expression */
is Number && true -> println("TRUE")
else -> println("FALSE")
}
以下将编译,但结果是 FALSE
.这是预期的行为吗?val num: Any = 2
when(num) {
num is Number && true -> println("TRUE")
else -> println("FALSE")
}
我有很长的时间条件列表,其中大多数只使用隐式主题,但有几个需要辅助条件
最佳答案
关于第一个:看 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
为假 num
甚至不是 bool 值 ;-)或者换句话说:您在
when
中的“主题”与每个条件进行比较(感谢 Bwvolleyball 的评论)。但是我真的不明白什么(但这也可能是我对语法的误解)......查看语法似乎有以下可能:
when {
is Number -> TODO()
}
但正如人们所料:它没有......但最后一句话是一个旁注。
关于kotlin - 使用主题时,Kotlin "when"表达式是否支持复合 bool 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52547464/