使用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。直接只允许inis(及其否定对等物)。否则,您只有表达式。

现在,关于您的第二个,它可能有助于先将其转换为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()
}

但正如人们所料想的那样:并非如此,但是最后一句话只是个旁注。

10-07 19:20
查看更多