Kotlin 忽略表达式

标签 kotlin

我想知道为什么下面的代码会产生奇怪的结果,而且编译器没有显示任何错误或警告。这看起来像是一个非常有效的错误来源。

    val a = 10 * 20 +
            10 * 30

    val b = 10 * 20
          + 10 * 30

    val c = (
               (10 * 20)
             + (10 * 30)
            )

    val d = (10 * 20)
          + (10 * 30)

    println(a)
    println(b)
    println(c)
    println(d)

输出是:

500
200
500
200

最佳答案

Kotlin 有可选的分号,它允许并鼓励源代码省略语句分隔符(即分号 ;)。因此,编译器很难猜测您作为程序员的实际意图:

val b = 10 * 20
       + 10 * 30

将被编译为 b = 500 的赋值和导致 300 但永远不会被赋值给任何东西的第二条语句(与 d)。您认为编译器如何知道第二行实际上是第一个表达式的一部分?它本身是有效的。

thread提供更多详细信息。

关于Kotlin 忽略表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034127/

相关文章:

kotlin - LocalDateTime 扩展功能和智能转换

kotlin - 如何在Kotlin中检查可为空的 bool 值

kotlin - 在Kotlin中访问变量

java - 在android中添加两个MutableList

kotlin - Gradle:仅在发布到本地时才更改工件名称

kotlin - 如何在 Kotlin 中使用 XOR

java - 使用 SimpleDateFormat 返回日历

kotlin - 在 iOS/XCode 的内置 .frameworks 中包含 Kotlin/Native KDocs 文档

android - MainScope 与 GlobalScope

spring - 使用参数化 Spring 应用程序上下文配置进行 JUnit 参数化测试