在這段代碼意味着,以及如何使用這些對象
class remote_client ((ic,oc) as conn) =
object(self: #Arakoon_client.client)
在這段代碼意味着,以及如何使用這些對象
class remote_client ((ic,oc) as conn) =
object(self: #Arakoon_client.client)
這意味着你有一個值自其表示對象(實例)本身,由#Arakoon_client.client類型公開約束。
「對象」必須具有的#Arakoon_client.client
在許多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
的對象的類型。
我仍然被」#Arakoon_client.client「的含義所困惑, – blackmath
在Arakoon_client模塊中,有一個類名爲client
。表達式Arakoon_client.client
涉及這種類型。正如@FabriceLefessant的回答所指出的那樣,self
引用了對象本身,而冒號後面的表達式表示對象必須符合的類型。
最後,在類類型名前面的#
號表示類型沒有關閉(因此,「公開約束」由@Ontologiae使用的術語),這意味着self
必須支持至少該接口,但可以也持有其他方法。
換句話說,這或多或少相當於java中的implements Arakoon_client.client
。
你的意思是#Arakoon_client.client「嗎?它是否也像繼承? – blackmath