OCaml(メディエーターパターン)の2つのクラス間の相互バインドを達成しようとしており、コンパイル時にエラーが発生しています。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]構文に精通しているとは言えませんが、メディエータがすべての同僚への参照を保持できるようにしようとすると各同僚をそれぞれのメディエータに任命しながら、ソースコードにおけるクラスの定義の重要性を克服しようとしています。どのようにして同僚にメディエーターの参照を残すことができますか?
ありがとうございます。あなたの説明はとても役に立ちました。 –