0
在下面的代码片段中,我想做一个非常简单的计算d = a + b + c; a, b, c = b, c, d
。它迭代几次。big.NewInt匿名变量的怪异行为
在第一次尝试,我做一个匿名变量big.NewInt(0).Add(a, b)
得到的a + b
的结果,然后将其添加和c
得到的a + b + c
最终结果。但从第二次迭代中,d.Add(big.NewInt(0).Add(a, b), c)
更改为c
,然后b
,然后a
的值,当然最后的结果是错误的。
但是,第二次尝试的方法给了我正确的答案。有谁能告诉我为什么,请吗?
package main
import (
"fmt"
"math/big"
)
func main() {
// first try
a := big.NewInt(1)
b := big.NewInt(2)
c := big.NewInt(3)
d := big.NewInt(0)
for i := 0; i < 5; i++ {
// d = a + b + c
d.Add(big.NewInt(0).Add(a, b), c)
fmt.Println(a, b, c, d)
// a <- b, b <- c, c <- d
a, b, c = b, c, d
fmt.Println(a, b, c, d)
}
fmt.Println(d)
// second try
a = big.NewInt(1)
b = big.NewInt(2)
c = big.NewInt(3)
d = big.NewInt(0)
for i := 0; i < 5; i++ {
// d = a + b + c
d = big.NewInt(0).Add(big.NewInt(0).Add(a, b), c)
fmt.Println(a, b, c, d)
// a <- b, b <- c, c <- d
a, b, c = b, c, d
fmt.Println(a, b, c, d)
}
fmt.Println(d)
}
我明白了。非常感谢。 – Alexander