2013-01-02 44 views
3

什么ocaml的类对象

​​

在这段代码意味着,以及如何使用这些对象

class remote_client ((ic,oc) as conn) = 

object(self: #Arakoon_client.client) 

回答

2

这意味着你有一个值自其表示对象(实例)本身,由#Arakoon_client.client类型公开约束。

“对象”必须具有的#Arakoon_client.client

+0

你的意思是#Arakoon_client.client“吗?它是否也像继承? – blackmath

6

在许多OO-语言的所有方法中,存在一个关键字(this在C++)指从它的方法中的对象。在OCaml中,您可以通过在object关键字(在这里,他们选择了self)后指定其名称来选择要用于引用该对象的名称。

在OCaml中,你也可以从中一类继承的父母给了一个名字:

class x = object (self) 
    inherit x_parent as parent 
    method print = parent#print; print_newline() 
end 

例如,这可以用于使用来自一个祖先,已经由一个方法重写方法在当前类中:在前面的示例中,parent#print调用继承的方法,而self#print将调用当前的方法。

最后,当您定义类x时,可以使用#x表示法引用此类的对象类型。这里,#Arakoon_client.client是指在模块Arakoon中定义的类别client的对象的类型。

+0

我仍然被”#Arakoon_client.client“的含义所困惑, – blackmath

2

Arakoon_client模块中,有一个类名为client。表达式Arakoon_client.client涉及这种类型。正如@FabriceLefessant的回答所指出的那样,self引用了对象本身,而冒号后面的表达式表示对象必须符合的类型。

最后,在类类型名前面的#号表示类型没有关闭(因此,“公开约束”由@Ontologiae使用的术语),这意味着self必须支持至少该接口,但可以也持有其他方法。

换句话说,这或多或少相当于java中的implements Arakoon_client.client