做什么
self: #Arakoon_client.client
在这段代码中意味着,以及如何使用这样的对象
class remote_client ((ic,oc) as conn) =
object(self: #Arakoon_client.client)
做什么
self: #Arakoon_client.client
在这段代码中意味着,以及如何使用这样的对象
class remote_client ((ic,oc) as conn) =
object(self: #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
的类的对象类型。client
Arakoon
在Arakoon_client模块中,有一个名为client
. 该表达式Arakoon_client.client
指的是这种类型。正如@FabriceLefessant 的回答中所述,self
指的是对象本身,冒号后面的表达式是对象必须符合的类型。
最后,#
类类型名前面的符号表示该类型不是封闭的(因此是@Ontologiae 使用的“开放约束”术语),这意味着self
必须至少支持该接口,但也可能包含其他方法。
换句话说,这或多或少相当于implements Arakoon_client.client
java中的。
这意味着您有一个值 self 代表对象(实例化)本身,并通过类型#Arakoon_client.client 公开约束。
'object' 必须具有#Arakoon_client.client 的所有方法