我是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)
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误"无效的递归类型环境".根据我的研究,我将父改为*Environment.但是现在当我需要使用var类型的环境创建一个新的环境时,它会得到错误"不能使用fun_Val.ds(类型环境)作为类型*环境中的字段值".我创建环境如下:
Environment{fun_Val.ds,fun_Val.param,exp.arg_exp.interp(env)}
Run Code Online (Sandbox Code Playgroud)
我试图将此帖中的代码数量保持在一个限制,但如果您需要更多,或有其他问题,请告诉我.
Eva*_*haw 61
你需要定义Environment为:
type Environment struct {
parent *Environment // note that this is now a pointer
symbol string
value RCFAEValue
}
Run Code Online (Sandbox Code Playgroud)
否则,编译器无法确定Environment结构的大小.指针的大小是已知的,但包含自身的东西有多大?(内部结构也包含自身,内部结构也是如此,等等.)
创建环境将如下所示:
Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15656 次 |
| 最近记录: |