OCaml编译彼此依赖的类

时间:2017-10-01 15:29:50

标签: ocaml circular-dependency

假设我有两个叫A(父)和B(子)的类。 A存储B对象列表,B存储包含A对象的单个实例的变量。

据我所知,OCaml要求根据它们的依赖关系以某种顺序指定类(即如果C依赖于D,则需要编译如下代码:ocamlopt -o main D.ml C.ml

由于A类和B类之间的关系非常紧密,我们如何将这两个类一起编译?

1 个答案:

答案 0 :(得分:1)

您可以使用and在同一源文件中定义这两个类,以便递归定义它们。

# class a = object val my_b_list : b list = [] end
  and b = object val my_a : a = new a end;;
class a : object val my_b_list : b list end
and b : object val my_a : a end

如果需要在单独的文件中定义它们,可以通过另一个文件的类型对其中一个进行参数化。这更复杂。