以下のコードスニペットで、私は非常に簡単な計算をしたいと考えていますd = a + b + c; a, b, c = b, c, d
。数回繰り返します。最初の試みでbig.NewInt匿名変数の奇妙な振る舞い
、私はその後a + b + c
の最終的な結果を得るためにそれとc
を追加し、a + b
の結果を得るために、匿名の変数big.NewInt(0).Add(a, b)
を作ります。しかし、2回目の反復では、d.Add(big.NewInt(0).Add(a, b), c)
がc
の値を変更した後、b
、次にa
となり、最終結果は間違っています。
しかし、2回目の試行では正しい答えが得られました。誰も私になぜ、教えてもらえますか?
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