今天我在 Kotlin 中遇到了一个我无法解释的奇怪行为。鉴于以下代码:
data class Data(
val v1: Int,
val v2: Int,
val v3: Int)
fun main() {
val d = Data(1,1,1)
val sum1 = d.v1 + d.v2 + d.v3
println("Oneliner: $sum1") // prints: Oneliner: 3
val sum2 = d.v1
+ d.v2
+ d.v3
println("OperatorFirst: $sum2") // prints: OperatorFirst: 1
val sum3 = d.v1 +
d.v2 +
d.v3
println("OperatorLast: $sum3") // prints: OperatorLast: 3
}
(可测试:https://pl.kotl.in/gMjif_6FO)
现在这似乎取决于您放置
+
的位置。操作符以获得 3 的正确结果。但是,IDE 没有显示第二个版本可能有任何问题,我找不到任何关于为什么这种情况会表现不同的信息。一个关于软件工程空间的问题也说一些编码指南建议将操作符放在行首:https://softwareengineering.stackexchange.com/questions/93670/line-break-before-after-operator
此外,对于这种行为,我能找到的唯一解释是
+
在行开头被解释为一元加运算符。 https://www.programiz.com/kotlin-programming/operators#unary然而,在
val
上,即使这对我来说也毫无意义。
最佳答案
这就是您为可选分号支付的价格。安德烈·布雷斯拉夫 (Andrey Breslav) 在他的一次演讲中说,这是有意的行为。像 + 或 * 这样的二元运算符应该放在顶行,而不是底行。如果要将它们放在底线,请使用括号:
val sum = (1
+ 1
+ 1)
println(sum) // prints: 3
关于Kotlin 换行符 - 结果取决于运算符位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59712664/