gpt4 book ai didi

nim-lang - 在 Nim 中进行循环依赖的规范方法

转载 作者:行者123 更新时间:2023-12-05 00:22:16 25 4
gpt4 key购买 nike

假设我们有两个模块:一个定义一个 Object,一个定义一个 ObjectFactory。 Object 需要访问 ObjectFactory 才能使用它的一些功能,并且 ObjectFactory 需要访问 Object 才能实例化 Objects。

如果 Object 在一个模块中实现而 ObjectFactory 在另一个模块中实现,那么在 Nim 中解决此问题的规范方法是什么?

最佳答案

我假设这里的问题是相互递归的类型,即两种或多种类型的声明相互引用。通过相互递归导入可以很好地处理相互引用的方法或过程,尽管在这种情况下必须小心模块初始化。

与通常要求相互递归类型位于同一模块/编译单元中的大多数其他语言一样,有两个主要答案。

一种解决方案是将两种类型放在同一个模块中,由声明对象类型的模块和声明工厂类型的模块导入(这两种类型仍然需要是同一类型子句的一部分)。例如,您创建一个单独的文件,名为 factory_types.nim ,并将两种类型都放入其中:

type
ObjectFactory = ref object
lastValue: Object
x: proc(): Object

Object = ref object
factory: ObjectFactory

然后,该模块将由实现对象的模块和实现工厂的模块导入。

另一种解决方案,您可以将每种类型保留在其模块中,是参数多态性,其中类型参数用作前向声明。例如,你这样做:
type
ObjectFactory[TargetType] = ref object
lastValue: TargetType
generator: proc(): TargetType

和其他地方:
type
Object = ref object
factory: ObjectFactory[Object]

关于nim-lang - 在 Nim 中进行循环依赖的规范方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com