Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ocaml中的循环构建,无法绕过它?_Ocaml_Circular Dependency - Fatal编程技术网

ocaml中的循环构建,无法绕过它?

ocaml中的循环构建,无法绕过它?,ocaml,circular-dependency,Ocaml,Circular Dependency,所以我得到了一个阵营类型,它有一个典当列表,但是典当类型包括一个记录类型,它是到阵营的链接 两者都位于不同的模块中,位于不同的文件中。将它们放在一个文件中会破坏我组织源代码的方式,而且它无论如何都不起作用 我看不出有什么办法可以绕过圆形建筑,有解决办法吗 我曾尝试使用第三个模块,它可以是两者之间的链接,但这似乎太不一致了如果两个编译单元(即文件)具有相互依赖性,那么最简单的方法就是将此依赖性分解到第三个文件中,并使这两个依赖于它。另一种解决方案是使有问题的部分具有多态性,并独立地实例化具体类型,

所以我得到了一个
阵营
类型,它有一个
典当
列表,但是
典当
类型包括一个记录类型,它是到
阵营
的链接

两者都位于不同的模块中,位于不同的文件中。将它们放在一个文件中会破坏我组织源代码的方式,而且它无论如何都不起作用

我看不出有什么办法可以绕过圆形建筑,有解决办法吗


我曾尝试使用第三个模块,它可以是两者之间的链接,但这似乎太不一致了

如果两个编译单元(即文件)具有相互依赖性,那么最简单的方法就是将此依赖性分解到第三个文件中,并使这两个依赖于它。另一种解决方案是使有问题的部分具有多态性,并独立地实例化具体类型,这是一个没有好的示例就很难说明的概念,因此,如果您能为我们提供有关代码及其组织的更多见解,我们将更有帮助

解决方案可能是在第三个模块中定义这两种类型。在ocaml中不使用循环数据结构通常被认为是一种好的风格,因此您可能需要更改类型(例如,
pawn
可能有一个
阵营名称
,这样您就可以确定两个
pawn
是否在同一阵营中)。第二个问题是,如果您想在模块之间来回调用许多函数。但是在这种情况下,模块根本不是独立的,不应该放在单独的文件中。如果您包含说明问题具体性质的代码,那么提供建议就会容易得多。我可以说,根据你的描述,在这种情况下,你想要一对相互递归的数据类型对我来说似乎很奇怪。我想要
pawn
派系
列表中的主要原因是对它们进行迭代,我之所以希望典当能链接到他们的
阵营
,是因为他们可以根据自己的阵营获得不同的奖金,但最后我想我找到了一个解决办法。基本上我做了一个新的
阵营_enum
阵营
典当
都在他们的记录中有这一点