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

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

與接口混淆

與接口混淆

Go
烙印99 2022-09-12 20:20:16
我正在Go中編寫一個(gè)解析器,并且我有以下用于ast構(gòu)造的代碼:type NODE interface {    GetPosition() (int, int)}type EXPRESSION_NODE interface {    NODE    expressionNode()}// binary nodetype BINARY_EXPRESSION struct {    Operator    string    Left, Right EXPRESSION_NODE    Position}// implementing the EXPRESSION_NODE interface for BINARY_EXPRESSIONfunc (s BINARY_EXPRESSION) expressionNode()func (s BINARY_EXPRESSION) GetPosition() (int, int) { return s.Line, s.Column }所以我有一個(gè)接口EXPRESSION_NODE,BINARY_EXPRESSION結(jié)構(gòu),這個(gè)結(jié)構(gòu)實(shí)現(xiàn)了所有的接口方法。這是我的困惑:func (self *Parser) ParseBinaryExpression(    operators []string,    parser ExpressionParser,) (*EXPRESSION_NODE, error) {    self.SetPosition()    result, err := parser()    if err != nil {        return nil, ChainErrs(self.Err(BINARY_EXPRESSION_ERROR), err)    }    for Includes(operators, self.stream.Peek().Literal) {        operator := self.stream.Next().Literal        right, err := parser()        if err != nil {            return nil, ChainErrs(self.Err(BINARY_EXPRESSION_ERROR), err)            //ERROR: cannot use &(BINARY_EXPRESSION literal) (value of type *BINARY_EXPRESSION) as *EXPRESSION_NODE value in assignment            result = &BINARY_EXPRESSION{operator, result, right, self.position}        }    }    return result, nil}所以這條線result = &BINARY_EXPRESSION{operator, result, right, self.position}給我以下錯(cuò)誤:cannot use &(BINARY_EXPRESSION literal) (value of type *BINARY_EXPRESSION) as *EXPRESSION_NODE value in assignment所以當(dāng)我這樣做var a EXPRESSION_NODE = &BINARY_EXPRESSION{} 沒有指針,一切似乎都可以,但有指針...問題是我實(shí)際上需要從我的函數(shù)中返回*EXPRESSION_NODE
查看完整描述

1 回答

?
慕雪6442864

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

通常,您幾乎肯定永遠(yuǎn)不會(huì)使用指向接口的指針。相反,您需要的是指向您的類型的指針來實(shí)現(xiàn)接口。


首先,確保指向您的類型的指針實(shí)現(xiàn)了接口:


type BINARY_EXPRESSION struct {

    Operator    string

    Left, Right EXPRESSION_NODE

    Position

}


// Note that pointer receivers

func (s *BINARY_EXPRESSION) expressionNode()

func (s *BINARY_EXPRESSION) GetPosition() (int, int) { return s.Line, s.Column }

然后你的解析函數(shù)將如下所示:


func (self *Parser) ParseBinaryExpression(

    operators []string,

    parser ExpressionParser,

) (EXPRESSION_NODE, error) {

    // ... stuff ...

    result = &BINARY_EXPRESSION{operator, result, right, self.position}

    return result, nil

}

我建議您了解有關(guān) Go 接口以及如何定義實(shí)現(xiàn)它們的方法的更多信息:


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

添加回答

舉報(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)