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;;
在这段代码中,有几件我不太了解的事情。
(self:'mytype)self表示递归类,但'mytype的作用是什么?
有些{}会获得备份副本,其中副本仍为无,并将其分配给副本吗?
谢谢!
答案 0 :(得分:2)
在C ++,Java和JavaScript中,当前对象(执行该方法的对象)始终命名为this
。在Smalltalk中,它被命名为self
。在OCaml中,你可以给它任何你喜欢的名字。在object
之后括号中出现的是什么名称是当前对象的名称。在此示例中,当前对象名为self
。 (我不知道你的“递归课”是什么意思。)
在某些情况下,为当前对象的类型命名是很有用的。同样,您可以通过将: 'name
放在当前对象的名称之后为其指定任何名称。在此示例中,当前对象的类型名为'mytype
。该名称不会在代码中的任何位置使用,但如果代码变得更复杂,则可能会使用该名称。请注意,'mytype
不仅仅是类类型backup
的另一个名称。在继承自backup
的类中,'mytype
表示此继承类的类型。
您对save
方法的描述似乎是正确的。它会创建当前对象的副本,并将副本保存在名为copy
的字段中。副本的copy
字段设置为None
。即,即使包含的对象已经有一个副本,副本也没有自己保存的副本。此方法使用特殊符号{< ... >}
,它创建当前对象的副本。