package mainimport ( "fmt")type vector struct { x int y int}func (u vector) add(v vector) vector { fmt.Println("received: ", u) u.x += v.x u.y += v.y return u}func main() { vecA := vector{x: 5, y: 10} vecB := vector{x: 6, y: 7} fp := vecA.add // 1 vecA = fp(vecB) // 2 fmt.Println(vecA) vecA = fp(vecB) // 3 fmt.Println(vecA)}/*Output:received: {5 10}{11 17}received: {5 10}{11 17}*/在標記1fp處,我使用add函數聲明并初始化,vecA用作接收器。在標記2處,我更改了 的值vecA?,F在在3處,如果我們擴展語句:fp(vecA),它變成:vecA.add(vecB)。現在我認為它應該add使用“已更改” vecA(在標記2vecA處更改)調用函數,而不是(在標記1處更改)的舊值,而是add使用“舊” vecA(在標記1處)調用函數,這從輸出。為什么?雖然我找到了一種使用新的方法,vecA如下所示:package mainimport ( "fmt")type vector struct { x int y int}func (u *vector) add(v vector) { fmt.Println("received: ", *u) u.x += v.x u.y += v.y}func main() { vecA := &vector{x: 5, y: 10} vecB := vector{x: 6, y: 7} fp := vecA.add // 1 fp(vecB) // 2 fmt.Println(*vecA) fp(vecB) // 3 fmt.Println(*vecA)}/*Output:received: {5 10}{11 17}received: {11 17}{17 24}*/
- 2 回答
- 0 關注
- 145 瀏覽
添加回答
舉報
0/150
提交
取消