【问题标题】:circular build in ocaml, no way around it?ocaml中的圆形构建,没有办法解决吗?
【发布时间】:2019-07-03 20:18:33
【问题描述】:

所以我有一个faction 类型,它有一个pawns 的列表,但是pawn 类型包括一个记录类型,它是一个指向faction 的链接

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

我没有看到任何关于循环构建的方法,有解决方法吗?

我尝试过使用第三个模块,它可以作为两者之间的链接,但这似乎太不方便了

【问题讨论】:

  • 解决方案可能是第三个模块,其中定义了两种类型。在 ocaml 中没有循环数据结构通常被认为是一种很好的风格,因此您可能想要更改类型(例如,pawn 可能有 faction_name,因此您可以决定两个 pawns 是否属于同一派系)。您可能遇到的第二个问题是,如果您想在模块之间来回调用大量函数。但在这种情况下,模块根本不是真正独立的,也不应该在单独的文件中
  • 如果您包含说明问题具体性质的代码,则提供建议会容易得多。我可以说,鉴于你的描述,我觉得你需要一对相互递归的数据类型来处理这种情况。
  • 我想要pawnfaction 列表中的主要原因是对它们进行迭代,而我希望pawns 拥有指向他们faction 的链接的原因是他们可以根据他们的派系获得不同的奖金,但最后我想我找到了解决方法。 bascailly 我做了一个新的faction_enumfactionpawn 在他们的记录中都有这个

标签: ocaml circular-dependency


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 2020-02-01
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多