3

做什么

self: #Arakoon_client.client 

在这段代码中意味着,以及如何使用这样的对象

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

object(self: #Arakoon_client.client)
4

3 回答 3

6

在许多 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的类的对象类型。clientArakoon

于 2013-01-03T08:08:36.417 回答
2

Arakoon_client模块中,有一个名为client. 该表达式Arakoon_client.client指的是这种类型。正如@FabriceLefessant 的回答中所述,self指的是对象本身,冒号后面的表达式是对象必须符合的类型。

最后,#类类型名前面的符号表示该类型不是封闭的(因此是@Ontologiae 使用的“开放约束”术语),这意味着self必须至少支持该接口,但也可能包含其他方法。

换句话说,这或多或少相当于implements Arakoon_client.clientjava中的。

于 2013-01-03T12:50:55.737 回答
2

这意味着您有一个值 self 代表对象(实例化)本身,并通过类型#Arakoon_client.client 公开约束。

'object' 必须具有#Arakoon_client.client 的所有方法

于 2013-01-02T16:20:59.833 回答