为什么在Go中不能使用add运算符进行元组分配?

时间:2018-12-24 23:34:18

标签: go

根据the Golang language syntax specification

  

Assignment = ExpressionList assign_op ExpressionList

     

assign_op = [add_op | mul_op]“ =”。

此外:

  

元组分配将多值操作的各个元素分配给变量列表。

但是,当尝试编译the following code时:

package main

func addOne(a, b int) (int, int) {
    return a+1, b+1
}

func main() {
    var a, b int
    a, b += addOne(a, b)
}

编译器抱怨:

syntax error: unexpected +=, expecting := or = or comma

我知道临时变量可以解决此问题。例如

aTemp, bTemp := addOne(a, b)
a += aTemp
b += bTemp

但是,这似乎是语言所支持的东西。

这是编译器中的错误吗?我是否错过了某种语言的语言?

1 个答案:

答案 0 :(得分:2)

<i> <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <!-- Border --> <item> <shape> <solid android:color="#E9EEFB"> </solid> </shape> </item> <!-- Body --> <item android:top="1dp" android:bottom="1dp" android:right="1dp" android:left="1dp"> <shape> <solid android:color="#ffffff"> </solid> </shape> </item> </layer-list> </i> 是分配操作,而不是简单的分配。规范明确指出:

  

赋值运算 x op = y,其中 op 是二进制算术运算符,等效于x = x op (y)[。 ..]在赋值操作中,左侧和右侧的表达式列表都必须只包含一个单值表达式。

https://golang.org/ref/spec#Assignments