0
class backup =
  object (self : 'mytype)
    val mutable copy = None
    method save = copy <- Some {< copy = None >}
    method restore = match copy with Some x -> x | None -> self
  end;;

在这段代码中,有几件事我不太明白。

  1. (self: 'mytype) self 表示递归类,但'mytype 的作用是什么?

  2. 某些 {} 获取副本仍然为 None 的备份副本,并将其分配给副本?

谢谢!!

4

1 回答 1

2

在 C++、Java 和 JavaScript 中,当前对象,即执行方法的对象,总是命名为this. 在 Smalltalk 中,它被命名为self. 在 OCaml 中,你可以给它起任何你喜欢的名字。括号中出现的任何名称object都是当前对象的名称。在此示例中,当前对象名为self。(我不知道您所说的“递归类”是什么意思。)

在某些情况下,为当前对象的类型命名很有用。: 'name同样,您可以在当前对象的名称后面加上您喜欢的任何名称。在这个例子中,当前对象的类型被命名为'mytype。该名称未在代码中的任何地方使用,但如果代码变得更复杂,则可能会使用它。请注意,这'mytype不仅仅是类类型的另一个名称backup。在继承自 的类中backup'mytype表示此继承类的类型。

您对该save方法的描述似乎是正确的。它创建当前对象的副本并将副本保存在名为 的字段中copy。副本的copy字段设置为None。即,即使包含对象已经有一个副本,该副本也没有自己的保存副本。此方法使用特殊符号{< ... >},它创建当前对象的副本。

于 2013-10-12T03:24:39.567 回答