Kotlin:为什么 '+ a + b' 没有被报告为语法错误?

Jas*_*own 5 kotlin

我刚刚诊断出一个愚蠢的错误,该错误归结为中间表达式的换行符:

 val total = anObject.oneLongVariableName + anObject.secondLongVariableName
           + anObject.thirdLongVariableName + anObject.fourthLongVariableName
Run Code Online (Sandbox Code Playgroud)

这看起来有效并且可以编译,但第三个和第四个变量不会添加到总数中。

这工作正常。

 val total = anObject.oneLongVariableName + anObject.secondLongVariableName +
             anObject.thirdLongVariableName + anObject.fourthLongVariableName
Run Code Online (Sandbox Code Playgroud)

这是一个语法错误:

 val product = anObject.oneLongVariableName * anObject.secondLongVariableName
             * anObject.thirdLongVariableName * anObject.fourthLongVariableName
Run Code Online (Sandbox Code Playgroud)

但 + 和 - 是“允许的”并且似乎被解析器丢弃。

Jof*_*rey 5

这是因为一元加运算符。

如果表达式的类型定义了 ,则该表达式+something有效。somethingoperator fun unaryPlus

另一方面,没有一元*运算符,只有展开运算符,并且它仅在代码的特定位置有效(当使用参数调用函数vararg并向其传递数组时)。

  • @JasonChown,它不会被默默地丢弃:如果“a”和“b”是_properties_,它们将被调用(“getA()”和“getB()”),包括它们可能产生的任何副作用。 (2认同)