2012-04-11 39 views
5

我想弄清楚如何我可以用其他对象参数化OCaml对象。具体来说,我希望能够创建一个link对象,它包含着node对象和向后node对象,我希望能够通过说一些像创建一个链接:在OCaml中的对象内的对象

let link1 = new link node_behind node_ahead;; 

回答

8

对象是在正常的表达OCaml,因此您可以将它们作为函数和类构造函数参数传递。有关更深入的解释,请查看OCaml手册中的related section

因此,举例来说,你可以写:

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