为了账号安全,请及时绑定邮箱和手机立即绑定

Go结构中的无效递归类型

Go结构中的无效递归类型

Go
jeck猫 2021-05-04 09:10:47
我是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)用作* Environment in field value”。我正在创建环境,如下所示:Environment{fun_Val.ds,fun_Val.param,exp.arg_exp.interp(env)}我试图将这篇文章中的代码量限制在一定范围内,但是如果您需要更多代码或有其他问题,请告诉我。
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您需要定义Environment为:


type Environment struct {

    parent *Environment // note that this is now a pointer

    symbol string

    value  RCFAEValue

}

否则,编译器将无法确定环境结构的大小。指针的大小是已知的,但是包含自身的东西有多大呢?(内部结构也包含自身,内部内部结构也包含此类,等等。)


创建环境将如下所示:


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


查看完整回答
反对 回复 2021-05-10
?
aluckdog

TA贡献1847条经验 获得超7个赞

我希望这可以解决问题:

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

(这&是Go中运算符的“地址”。)


查看完整回答
反对 回复 2021-05-10
  • 2 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信