我最近想到了这个:
func main() {
x, y := 0, 1
x, y = y, x+y
fmt.Println(y)
}
Run Code Online (Sandbox Code Playgroud)
我的想法是:
x, y = y, x+y
Run Code Online (Sandbox Code Playgroud)
与以下相同:
x = y
y = x+y
Run Code Online (Sandbox Code Playgroud)
这将导致最终值 x = 1, y = 2
然而,我得到的最终价值是 x = 1, y = 1
这是为什么?
谢谢.
这是如何指定的:
转让分两个阶段进行.首先,左边的索引表达式和指针间接(包括选择器中的隐式指针间接)的操作数和右边的表达式都按照通常的顺序进行评估.其次,分配按从左到右的顺序进行.
赋值首先评估右侧的所有表达式,然后将结果分配给左侧的变量.
您的
x, y = y, x+y
Run Code Online (Sandbox Code Playgroud)
基本上相当于此
tmp1 := y
tmp2 := x+y
x = tmp1
y = tmp2
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用此事实在一行中交换2个变量,如下所示:
a, b = b, a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |