第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang,帶有值接收器的函數(shù)的函數(shù)指針,在第二次調(diào)用時不會使用更改的接收器調(diào)用該函數(shù)

Golang,帶有值接收器的函數(shù)的函數(shù)指針,在第二次調(diào)用時不會使用更改的接收器調(diào)用該函數(shù)

Go
白板的微信 2022-05-23 17:15:28
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函數(shù)聲明并初始化,vecA用作接收器。在標記2處,我更改了 的值vecA。現(xiàn)在在3處,如果我們擴展語句:fp(vecA),它變成:vecA.add(vecB)?,F(xiàn)在我認為它應(yīng)該add使用“已更改” vecA(在標記2vecA處更改)調(diào)用函數(shù),而不是(在標記1處更改)的舊值,而是add使用“舊” vecA(在標記1處)調(diào)用函數(shù),這從輸出。為什么?雖然我找到了一種使用新的方法,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 回答

?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

現(xiàn)在我認為它應(yīng)該使用“更改”的 vecA 調(diào)用 add 函數(shù)

不,這種想法是錯誤的。fp 是并且保持綁定到舊值。


查看完整回答
反對 回復(fù) 2022-05-23
?
largeQ

TA貢獻2039條經(jīng)驗 獲得超8個贊

在您的第一個示例中, fp 使用 vecA 的值,因此 vecA 發(fā)生的任何事情都不會在初始分配后反映在 fp 中。

在您的第二個示例中, fp 使用 vecA 的地址。現(xiàn)在您將內(nèi)存位置中的 vecA 的值傳遞給 add func() 以便它使用更新的值。


查看完整回答
反對 回復(fù) 2022-05-23
  • 2 回答
  • 0 關(guān)注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號