簡體   English   中英

go中的結構中的無效遞歸類型

[英]invalid recursive type in a struct in go

我是Go編程語言的新手,我有一個創建和解釋器的任務,但我遇到了以下問題:

我想將環境定義為:

type Environment struct{
    parent Environment
    symbol string
    value RCFAEValue
}

func (env Environment) lookup(lookupSymbol string) RCFAEValue{
    if lookupSymbol == env.symbol{
        return env.value
    } //if parent != nill {
        return env.parent.lookup(lookupSymbol)
}

但我收到錯誤“無效的遞歸類型環境”。 根據我的研究,我將父改為* Environment。 但是現在當我需要使用var類型的環境創建一個新的環境時,它會得到錯誤“不能使用fun_Val.ds(類型環境)作為類型*環境中的字段值”。 我創建環境如下:

Environment{fun_Val.ds,fun_Val.param,exp.arg_exp.interp(env)}

我試圖將此帖中的代碼數量保持在一個限制,但如果您需要更多,或有其他問題,請告訴我。

您需要將Environment定義為:

type Environment struct {
    parent *Environment // note that this is now a pointer
    symbol string
    value  RCFAEValue
}

否則,編譯器無法確定Environment結構的大小。 指針的大小是已知的,但包含自身的東西有多大? (內部結構也包含自身,內部結構也是如此,等等。)

創建環境將如下所示:

Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}

我希望這可以解決問題:

Environment{&fun_Val.ds,fun_Val.param,exp.arg_exp.interp(env)}

&是Go的'地址'運營商。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM