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

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

使用定義中的接口的Go接口

使用定義中的接口的Go接口

Go
阿晨1998 2021-05-17 16:17:17
我正在制作斐波那契堆。(它們?cè)谖艺谑褂玫乃惴愔卸啻翁岬?,并且我想將它們檢出。)我希望堆使用任何類型的節(jié)點(diǎn),因此我定義了一個(gè)Node接口:package nodetype Node interface {    AddChild(other Node)    Less(other Node) bool}type NodeList []Nodefunc (n NodeList) AddNode(a Node) {    n = append(n, a)}(我使用[] Node數(shù)組,因?yàn)樗c堆定義具有相同的影響。)如您所見(jiàn),Node接口使用Node類型的參數(shù)定義了它的兩個(gè)函數(shù)。這應(yīng)該意味著函數(shù)必須接受實(shí)現(xiàn)Node接口的參數(shù)。堆的其余部分使用這些節(jié)點(diǎn)。在使用此堆的程序中,我創(chuàng)建一個(gè)實(shí)現(xiàn)Node接口的類型:package mainimport "container/list"import node "./node"type Element struct {    Children *list.List    Value int}func (e Element) AddChild(f Element) {    e.Children.PushBack(f)}func (e Element) Less(f Element) bool {    return e.Value < f.Value}func main() {    a := Element{list.New(), 1}    n := new(node.NodeList)    n.AddNode(a)}但是,這沒(méi)有用。編譯器抱怨Element沒(méi)有正確的接口函數(shù)定義。cannot use a (type Element) as type node.Node in function argument:Element does not implement node.Node (wrong type for AddChild method)    have AddChild(Element)    want AddChild(node.Node)這是怎么了 顯然,Element不能正確實(shí)現(xiàn)接口,但是我認(rèn)為這是因?yàn)槲叶x接口的方式。在Go中有正確的方法來(lái)做我想做的事嗎?接口可以引用自己?jiǎn)幔?
查看完整描述

1 回答

?
白板的微信

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

功能


func (e Element) Less(f Element) bool

與界面的功能不匹配


func Less(other Node) bool

您需要實(shí)際匹配簽名,如


func (e Element) Less(f Node) bool

是的,這意味著您可以通過(guò)Node而不是Element。您將必須在運(yùn)行時(shí)進(jìn)行測(cè)試,并且會(huì)出現(xiàn)恐慌。


作為為什么這樣的一個(gè)示例,請(qǐng)考慮您的代碼是否合法,并且我嘗試了以下操作:


type Other int

func (o Other) Less(f Other) bool {

    return o < f

}

func (o Other) AddChild(f Other) {}

e = GetSomeElement() // of type Element

var o Other

var n Node = e

fmt.Println(n.Less(o))

因?yàn)槲覍?chǔ)存在Element類型的var中Node,所以現(xiàn)在我可以Less()用不是另一個(gè)Element違反了類型的參數(shù)來(lái)調(diào)用Element.Less()。這就是為什么這是不合法的。


查看完整回答
反對(duì) 回復(fù) 2021-05-24
  • 1 回答
  • 0 關(guān)注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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