英文:
How does multiple variable assignment work?
问题
请检查下面的示例代码,并查看第三行。
a := [3]int{10,20}
var i int = 50
i, a[2] = 100, i
fmt.Println(i) //100
fmt.Println(a) //[10 20 50]
我已经覆盖了变量i
中的值100
,并立即应用到整型数组中。当我打印数组时,新值没有被打印出来。在Go语言中,多变量赋值是如何工作的?为什么i
的值没有立即更新到数组中?
英文:
Please check the below sample code, and look into 3rd line.
a := [3]int{10,20}
var i int = 50
i, a[2] = 100, i
fmt.Println(i) //100
fmt.Println(a) //[10 20 50]
I have overwritten the value 100
in i
variable and immediately applied the int array. When I printed the array, the new value was not printed. How does multiple variable assignment work in Go? Why the i
value is not updated into the array immediately?
答案1
得分: 4
Go语言规范中的赋值部分提到:
> 赋值过程分为两个阶段。
> - 首先,左边的索引表达式和指针间接引用(包括选择器中的隐式指针间接引用)以及右边的表达式都按照通常的顺序进行求值。
- 其次,按照从左到右的顺序进行赋值。
这意味着:
var i int = 50
i, a[2] = 100, i
-
a[2]
被赋值为在赋值之前求值的i
(即50
) -
i
被赋值为100
英文:
The assigment section of the Go spec mentions:
> The assignment proceeds in two phases.
> - First, the operands of index expressions and pointer indirections (including implicit pointer indirections in selectors) on the left and the expressions on the right are all evaluated in the usual order.
- Second, the assignments are carried out in left-to-right order.
That means:
var i int = 50
i, a[2] = 100, i
-
a[2]
is assigned thei
evaluated before assignment (50
) -
i
is assigned100
答案2
得分: 3
这是在Go语言规范中描述和解释的。
基本上,这是一个语句,它同时将两个值分配给两个变量。语句的效果在语句完全执行时可见,就像其他任何表达式一样。
变量i
的值在第4行被执行时发生改变,所以在将值赋给a[3]
时,它的值仍然是50
。
英文:
This is intended and described in the Go language specs.
Basically it is one statement which happens to assign 2 values to 2 variables. The effects of the statement are available/visible when the statement is fully executed, like with any other expression.
The value of i
changes the moment you "hit" line 4, so at the time of the assignment to a[3]
its value is still 50
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论