什么是
self: #Arakoon_client.client
在此代码中表示,以及如何使用此类对象
class remote_client ((ic,oc) as conn) =
object(self: #Arakoon_client.client)
答案 0 :(得分:6)
在许多面向对象语言中,有一个关键字(C ++中为this
)从其方法中引用该对象。在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
的对象类型。
答案 1 :(得分:2)
这意味着你有一个值self表示对象(实例化)本身,以及#Arakoon_client.client类型公开的约束。
'object'必须拥有#Arakoon_client.client
的所有方法答案 2 :(得分:2)
在Arakoon_client模块中,有一个名为client
的类类型。表达式Arakoon_client.client
指的是此类型。正如在@FabriceLefessant的回答中所指出的,self
引用了对象本身,而冒号后的表达式指的是对象必须符合的类型。
最后,类typename前面的#
符号表示类型未关闭(因此@Ontologiae使用的“公开约束”术语),这意味着self
必须支持至少该界面,但也可能包含其他方法。
换句话说,这或多或少相当于java中的implements Arakoon_client.client
。