2013-01-02 48 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