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

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

轉(zhuǎn)到方法數(shù)組

轉(zhuǎn)到方法數(shù)組

Go
有只小跳蛙 2021-10-11 10:40:01
我可以將數(shù)組及其指針用于 Go 方法嗎?我有以下代碼:var array = [3]string{"A", "B", "C"}type arrayTypePt *[3]stringfunc (m *arrayTypePt) change() { m[1] = "W" }func main() {    (arrayTypePt(&array)).changeArray4()}但是這段代碼:http : //play.golang.org/p/mXDEhmA9wk給我一個(gè)錯(cuò)誤:invalid receiver type *arrayTypePt (arrayTypePt is a pointer type)invalid operation: m[1] (type *arrayTypePt does not support indexing)arrayTypePt(&array).changeArray4 undefined (type arrayTypePt has no field or method changeArray4)當(dāng)我用切片嘗試這個(gè)時(shí),我得到了同樣的錯(cuò)誤。為什么我不能在方法中做到這一點(diǎn)?
查看完整描述

2 回答

?
萬千封印

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊

方法的接收器類型不能是指向指針的指針,但這就是您所寫的:


func (m *arrayTypePt) change() { m[1] = "W" }

arrayTypePt已經(jīng)是一個(gè)指針*[3]string。引用語言規(guī)范:


[接收者] 類型必須是形式T或*T(可能使用括號) whereT是類型名稱。表示的類型T稱為接收器基類型;它不能是指針或接口類型,并且必須在與方法相同的包中聲明。


你的第二個(gè)錯(cuò)誤(“type *arrayTypePt 不支持索引”)也是這個(gè)結(jié)果(m是一個(gè)指向指針的指針,這就是你不能索引它的原因;如果它只是一個(gè)指向數(shù)組或切片的指針,指針間接將是自動的)。


你的第三個(gè)錯(cuò)誤只是一個(gè)錯(cuò)字,你聲明了一個(gè)名為change()and not的方法changeArray4()。


所以你應(yīng)該只命名非指針數(shù)組類型:


type arrayType [3]string

您可以直接使用此類型聲明數(shù)組:


var array = arrayType{"A", "B", "C"}

你可以簡單地調(diào)用它的change()方法:


array.change()

數(shù)組的地址將被自動獲?。ㄒ?yàn)樵揷hange()方法有一個(gè)指針接收器,但array變量本身不是一個(gè)指針)。


在Go Playground上試一試。


注釋/替代品

如果您希望您的array變量顯式為[3]string,您仍然可以通過將其轉(zhuǎn)換為arrayType,將其設(shè)置為另一個(gè)變量來使其工作,并且change()可以在 this 上調(diào)用(因?yàn)樗且粋€(gè)變量,它的地址可以被獲取 - 而轉(zhuǎn)換的地址喜歡arrayType(arr)不能):


arr2 := [3]string{"A", "B", "C"}

arr3 := arrayType(arr2)

arr3.change()

或者,如果您將變量聲明為指向 type 的指針[3]string,您可以保存所需的附加變量(這只是必需的,以便我們能夠獲取其地址):


arr4 := new([3]string)

*arr4 = [3]string{"A", "B", "C"}

((*arrayType)(arr4)).change()

在Go Playground上也可以嘗試這些變體。


查看完整回答
反對 回復(fù) 2021-10-11
?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊

如果您將數(shù)組/切片變量定義為接收器類型,則它工作正常:


type arrayType [3]string

var array arrayType = [3]string{"A", "B", "C"}   # note "arrayType" here

func (m *arrayType) change() { m[1] = "W" }

func main() {

    array.change()

}

我不確定為什么類型轉(zhuǎn)換的行為如此。


查看完整回答
反對 回復(fù) 2021-10-11
  • 2 回答
  • 0 關(guān)注
  • 215 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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