我正在尝试在OCaml中完成两个类之间的相互绑定(一个中介模式)并且在编译时遇到错误。

class virtual ['mediator] colleague mIn = object 
 val m = mIn
 method virtual getmediator : 'mediator
end;;

class concreteColleague mIn = object inherit colleague 
 method getmediator = m
end;;

(* Some other classes here *)

class mediator = object (self)
 val mutable myColleague = (None:colleague option)
 initializer 
  myColleague <- Some (new concreteColleague self)
end;;

错误:类构造函数同事需要1个类型参数,但此处应用于0类型参数。

我不能说我对类定义中的['foo]语法非常熟悉,但在尝试允许调解器保持对所有同事的引用时使用它(无效)每个同事对其各自的调解员同时也试图克服类源定义在源代码中的重要性。我如何允许同事继续提及他们的调解员?

有帮助吗?

解决方案

我修复了所有编译问题。从同事继承时,需要提供其类型参数。结果,具体的Colleague我认为也需要一个类型参数。此外,您忘记将构造函数参数mIn传递给继承的类。我使用对象的类型为myColleague的类型保护添加了一个类型参数。

class virtual ['mediator] colleague mIn = object 
 val m = mIn
 method virtual getmediator : 'mediator
end;;

class ['mediator] concreteColleague mIn =
 object inherit ['mediator] colleague mIn
 method getmediator = m
end;;

(* Some other classes here *)

class mediator = object (self : 'self)
 val mutable myColleague = (None:'self colleague option)
 initializer 
  myColleague <- Some (new concreteColleague self)
end;;

但是,我不熟悉Mediator模式,所以我不确定实现Mediator模式的正确方法是什么。你确定你需要对象和虚拟课程吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top