当前位置: 首页 > 面试题库 >

go结构中的无效递归类型

黎鹤轩
2023-03-14
问题内容

我是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{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}


 类似资料:
  • 问题内容: 我有一个将位置链接在一起的数据库表;一个位置可以在一个位置,也可以在另一个位置内。 这是深入探讨MySQL / PHP的深度: 在给定父级位置的情况下,如何使用MySQL如何获得其所有后代位置,无论深度如何? 问题答案: mysql.com上有 一篇漂亮的文章 ,概述了管理分层数据的各种方法。我认为它为您的问题提供了完整的解决方案,并显示了各种不太简单但较快的方法(例如嵌套集)。

  • 问题内容: 我已经为C中的驱动程序开发了一个DLL。我用C ++编写了一个测试程序,并且DLL可以正常工作。 现在,我想使用Python与该DLL进行交互。我已经成功隐藏了大多数用户定义的C结构,但是有一点我必须使用C结构。我是python的新手,所以我可能会出错。 我的方法是使用ctype在python中重新定义一些结构,然后将该变量传递给我的DLL。但是在这些类中,我有一个自定义链接列表,其中

  • 我有一个类似Github链接的JSON树 如您所见,此树对每个项使用属性来计算其值。所以我需要计算几个节点或根节点的值。 您可以看到PL6A,PL6B是树的末尾,其类型为。因此,我需要替换到树,这样,由构造的必须替换为。 示例:公式必须替换为(ACVALUE(PL6A)ACVALUE(PL6B))。。。 我该怎么做呢?谢谢你,对不起,英语不好 更新我已尝试此代码: 结果,一些节点运行良好 但如果我

  • 问题内容: Go的包裹中有个。不幸的是,它不是递归的。在Go中实现递归锁的最佳方法是什么? 问题答案: 很抱歉没有直接回答您的问题: 恕我直言,在Go中实现递归锁的最好方法是不实现它们,而是重新设计代码以一开始就不需要它们。我认为,对他们的渴望可能表明对某些(此处未知)问题使用了错误的方法。 作为上述权利要求的间接“证明”:递归锁是否是对涉及互斥锁的某些常见情况的一种常见/正确方法,它迟早会包含在

  • 问题内容: 我有一个简单的问题…我正在尝试使用切片在Golang中重现此递归数据结构。 现在,我在下面使用带有切片的递归数据结构的“粗糙”源代码,除了我输入的结构是结构而不是结构片之外,其他所有东西都可以正常工作。理想情况下,我希望类型化的递归数据结构是Trie的一部分,其中包含元素Trie {byte,[] Trie}。希望这有意义吗?现在,我有一个Trie struct {byte,[] Tr

  • 本文向大家介绍数据结构 二叉树的递归与非递归,包括了数据结构 二叉树的递归与非递归的使用技巧和注意事项,需要的朋友参考一下 数据结构 二叉树的递归与非递归 实例代码:  先序遍历(递归法)   后序遍历      感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!