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

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

為什么帶有指針接收器的方法在接收值時仍然有效?

為什么帶有指針接收器的方法在接收值時仍然有效?

Go
qq_笑_17 2021-06-09 13:28:46
我只是在玩圍棋巡回賽中的練習(xí) 51。該解釋聲稱該Scale方法在接收 aVertex而不是指向 a 的指針時無效Vertex。然而,當(dāng)我改變聲明v := &Vertex{3, 4},以v := Vertex{3, 4}在main輸出唯一的變化是丟失的&標(biāo)記指針。那么為什么Scale即使變量不是指針也會改變它接收到的變量呢?
查看完整描述

2 回答

?
拉丁的傳說

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

它不“接收”一個值。Go 是強類型的,因此如果在某處指定了指向 T 的指針,則指向 T ( *T)的指針是唯一可以作為此類類型位置的值發(fā)生的選項。

“魔術(shù)”在編譯器中,它在某些條件下有效地“重寫”您的代碼:

x.m()如果(的類型)的方法集x包含m并且參數(shù)列表可以分配給 的參數(shù)列表,則方法調(diào)用是有效的m。Ifx是可尋址的并且 &x 的方法集包含m,x.m()是 的簡寫(&x).m()


查看完整回答
反對 回復(fù) 2021-06-21
?
紅顏莎娜

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

游覽建議的區(qū)別實際上并不在于更改v := &Vertex{3, 4}v:= Vertex{3, 4},而是更改了兩種方法的定義,以便它們處理值而不是指針。因此,例如,對于Scale,func (v *Vertex) Scale(f float64) {...變?yōu)?code>func (v Vertex) Scale(f float64) {...(注意(v *Vertex),指針值變?yōu)?code>(v Vertex),非指針值)。在這兩種情況下,您都應(yīng)該保留vas的聲明v := &Vertex{3, 4}。

您會注意到,在第一種情況下,當(dāng)方法采用指針時,輸出為&{15 20} 25. 但是,當(dāng)這些方法采用值而不是指針時,輸出為&{3 4} 5。

在這兩種情況下,v都是指向Vertex對象的指針。在第一種情況下,指針被傳遞給方法,一切都按預(yù)期進行 - 對Vertex對象所做的任何修改都會對原始值進行,因此這些更改在方法返回后仍然存在。在第二種情況下,雖然v仍然是一個指針,但 Go 編譯器足夠聰明,可以轉(zhuǎn)換v.Scale(5)(*v).Scale(5), wherev被取消引用,并將結(jié)果值傳遞給Scale。


查看完整回答
反對 回復(fù) 2021-06-21
  • 2 回答
  • 0 關(guān)注
  • 255 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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