Ocaml - 前瞻声明(类)

mec*_*chu 4 ocaml

我需要有两个相互引用的课程.在Ocaml有没有办法做出其中一个的前瞻宣言?

(我不认为这可能与单词更容易and).

或者也许它是可能的,但不同于我尝试的方式?

Chr*_*way 7

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)