在这段代码意味着,以及如何使用这些对象
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