1

我正在尝试在 OCaml 中完成两个类之间的相互绑定(a la Mediator Pattern's),并且在编译时出现错误。

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] 语法非常熟悉,但是在试图让调解员保留对所有同事和每个同事的引用时,我已经求助于它(无济于事)它各自的中介,同时也试图克服源代码中类定义的重要性。我该如何让同事保留对他们调解员的参考?

4

1 回答 1

3

我修复了所有编译问题。当你从同事那里继承时,你需要提供它的类型参数。因此,我认为具体同事也需要一个类型参数。此外,您忘记将构造函数参数 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;;

但是,我不熟悉中介者模式,所以我不确定实现中介者模式的正确方法是什么。你确定你需要对象和虚拟类和东西吗?

于 2009-05-03T02:14:59.617 回答