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