ocaml类对象

时间:2013-01-02 15:59:50

标签: ocaml

什么是

self: #Arakoon_client.client 

在此代码中表示,以及如何使用此类对象

class remote_client ((ic,oc) as conn) =

object(self: #Arakoon_client.client)

3 个答案:

答案 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