Kotlin 为什么加号必须在一行的末尾,而不是下一行的开头?

Kotlin 为什么加号必须在一行的末尾,而不是下一行的开头?,kotlin,Kotlin,在Kotlin中,如果希望加法表达式跨越多行,则需要将加号放在行的末尾,而不是开头。例如: var a = 1 var b = 2 var c = 3 var d = a + b + c println(d) // prints "6" var e = a + b + c println(e) // prints "1" 据我所知,这是因为Kotlin将第二个示例解释为三个独立的语句,如下所示: var e = a + b + c 但是我还没有找到任何

在Kotlin中,如果希望加法表达式跨越多行,则需要将加号放在行的末尾,而不是开头。例如:

var a = 1
var b = 2
var c = 3

var d = a +
    b +
    c

println(d) // prints "6"

var e = a
    + b
    + c

println(e) // prints "1"
据我所知,这是因为Kotlin将第二个示例解释为三个独立的语句,如下所示:

var e = a
+ b
+ c
但是我还没有找到任何文档说明为什么
+somevariable
本身就是一个有效的语句。它不增加变量,而且
println(+somevariable)
打印的值与
println(somevariable)
我相信行

val a = 5
+ 6
解析为两条语句:

  • 使用表达式值定义一个
    var
  • 表达式
    +6
    ,带一元加号

  • 我在Scala语言中也遇到了同样的问题。

    这只是因为数学一元运算符(+and-)
    +3==3==-3
    。检查Kotlin文档中的
    Int.unaryPlus()
    Int.unaryPlus
    ,我认为你是对的;我只是不明白为什么一元加号本身是一个有效的语句,它没有分配给变量,没有在方法中使用,也没有从方法返回。我想这只是语言上的一个奇怪现象。你可以编写一个执行副作用的
    unaryPlus
    函数。在这种情况下,只执行
    +obj
    将产生效果。当然,
    Int
    上的
    unaryPlus
    函数不会执行此操作,但它们不会使这个特殊情况不被编译。@marstran更重要的是:如果您查看HTML DSL示例,您会看到文本内容通过
    +“text Goes Here”
    行添加到标记中)