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

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

基于接口抽象地實現(xiàn)“Stringer”

基于接口抽象地實現(xiàn)“Stringer”

Go
慕神8447489 2022-11-28 10:29:12
我正在嘗試“抽象地”實現(xiàn)一個接口。我的意思是我試圖根據(jù)另一個接口的方法來實現(xiàn)該接口的方法。這是我嘗試過的方法(但它不起作用,因為似乎我們不允許使用接口類型作為接收器):package symbolsimport "fmt"type Symbol interface {    Name() string}type TerminalSymbol struct {    rune rune}func (t TerminalSymbol) Name() string {    return `'` + string(t.rune) + `'`}type NonTerminalSymbol struct {    name string}func (nt NonTerminalSymbol) Name() string {    return nt.name}//////////////////////////////////////////////////////////// Try to implement 'Stringer' interface for Symbolsfunc (s Symbol) String() string {    //^ ERROR: invalid receiver type Symbol (pointer or interface type)    return fmt.Sprintf("A symbol with name: %v", s.Name())}我想 go 編譯器本質(zhì)上是在告訴我,根本不支持基于另一個接口實現(xiàn)一個接口?我想我可以簡單地接受提示并改為這樣做:func (s NonTerminalSymbol) String() string {    return fmt.Sprintf("A symbol with name: %v", s.Name())}func (s TerminalSymbol) String() string {    return fmt.Sprintf("A symbol with name: %v", s.Name())}這行得通,但最終會重復“String”方法的實現(xiàn)。在 Java 中,我們可以很容易地避免這種重復;例如,通過向抽象類添加具體方法;或者通過向接口中的某些方法添加“默認”實現(xiàn)。有沒有一種“慣用”的方式來完成這種事情?(也就是說,我們可以在不Symbol復制.StringerString()
查看完整描述

1 回答

?
白衣非少年

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

您不能擁有類似于調(diào)用具體實現(xiàn)方法的抽象基類的結構。有很多方法可以模擬它,但我猜這不是你要問的。


在 Go 中,接口只是一個方法列表,不存在類繼承的概念。您可以使用類型嵌入構建對象層次結構,但這不提供實現(xiàn)它所需的后期綁定。


但是,您可以這樣做:


為符號創(chuàng)建縱梁函數(shù):


func SymbolToString(s Symbol) string {

       return fmt.Sprintf("A symbol with name: %v", s.Name())

}

String現(xiàn)在您可以為每個結構編寫簡單的方法實現(xiàn):


type NonTerminalSymbol struct {

    name string

}


func (n NonTerminalSymbol) String() string {return SymbolToString(n)}


查看完整回答
反對 回復 2022-11-28
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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