[英]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.