Ocaml没有任何类似前向声明的东西(即最终会定义某些内容的承诺),但它具有递归定义(即一组声明然后立即相互定义的事物).表达式,类型,类和模块之间可以进行递归定义(以及更多); 相互递归模块允许递归地定义混合的对象集.
您可以使用带有关键字的递归定义来解决您的问题and:
class foo(x : bar) = object
method f () = x#h ()
method g () = 0
end
and bar(x : foo) = object
method h () = x#g()
end
Run Code Online (Sandbox Code Playgroud)