kotlin - 使用主题时,Kotlin "when"表达式是否支持复合 bool 表达式?

标签 kotlin

是否可以在 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它的目的是。只有 inis (以及它们的否定对应物)被直接允许。否则你只有表达式。

现在关于您的第二个,可能有助于将其转换为 if/else ——先声明。基本上你的 when将如下所示:

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

如果看看这个就很清楚为什么它总是打印 FALSE .虽然 num is Number变成 truetrue && true还在true , num == true为假 num甚至不是 bool 值 ;-)

或者换句话说:您在 when 中的“主题”与每个条件进行比较(感谢 Bwvolleyball 的评论)。

但是我真的不明白什么(但这也可能是我对语法的误解)......查看语法似乎有以下可能:
when {
  is Number -> TODO()
}

但正如人们所料:它没有......但最后一句话是一个旁注。

关于kotlin - 使用主题时,Kotlin "when"表达式是否支持复合 bool 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52547464/

相关文章:

Kotlin 列表尾函数

java - Android Studio,缺少android.support.annotation包

arrays - 将数组映射到 kotlin 对象列表

Android Room 无法弄清楚如何将此字段保存到数据库中

java - 无法在 Android Studio 中导入数据绑定(bind)类

java - 使用 kotlin 在菜单中制作可点击的链接

android - 无法访问持有人中的 View

logging - 如何配置 kotlin-logging 记录器

spring-boot - Kotlin Spring Boot应用程序-为什么表达式主体没有功能?