OCaml オブジェクトを他のオブジェクトでパラメータ化する方法を見つけようとしています。具体的にlink
は、前方node
オブジェクトと後方node
オブジェクトを含むオブジェクトを作成できるようにしたいのですが、次のように言ってリンクを作成できるようにしたいです。
let link1 = new link node_behind node_ahead;;
オブジェクトは OCaml の正規表現であるため、関数およびクラス コンストラクターの引数として渡すことができます。より深い説明については、OCaml マニュアルの関連セクションを参照してください。
たとえば、次のように記述できます。
class node (name : string) = object
method name = name
end
class link (previous : node) (next : node) = object
method previous = previous
method next = next
end
let () =
let n1 = new node "n1" in
let n2 = new node "n2" in
let l = new link n1 n2 in
Printf.printf "'%s' -> '%s'\n" l#previous#name l#next#name