OCaml:对象定义&;克隆 类备份= 对象(self:'mytype) val可变副本=无 方法save=copy} 方法还原=将副本与某些x->x |无->自身匹配 完;;;
在这段代码中,有几点我不太理解OCaml:对象定义&;克隆 类备份= 对象(self:'mytype) val可变副本=无 方法save=copy} 方法还原=将副本与某些x->x |无->自身匹配 完;;;,ocaml,Ocaml,在这段代码中,有几点我不太理解 (self:'mytype)self表示递归类,但是'mytype'的作用是什么 某些{}获取一个备份副本,其中副本仍然为空,并将其分配给副本 谢谢。在Smalltalk中,它被命名为self。在OCaml中,您可以给它起任何您喜欢的名字。对象后括号中出现的任何名称都是当前对象的名称。在本例中,当前对象名为self。(我不知道你说的“递归类”是什么意思。) 在某些情况下,为当前对象的类型命名很有用。同样,您可以在当前对象的名称后加上:“name,给它取任何您喜欢的
谢谢在C++、java和javascript中,当前对象,即执行该方法的对象,总是被命名为<代码> < < /代码>。在Smalltalk中,它被命名为
self
。在OCaml中,您可以给它起任何您喜欢的名字。对象
后括号中出现的任何名称都是当前对象的名称。在本例中,当前对象名为self
。(我不知道你说的“递归类”是什么意思。)
在某些情况下,为当前对象的类型命名很有用。同样,您可以在当前对象的名称后加上:“name
,给它取任何您喜欢的名称。在本例中,当前对象的类型命名为'mytype
。代码中的任何地方都没有使用该名称,但如果代码变得更复杂,则可能会使用该名称。请注意,'mytype
不仅仅是类类型备份的另一个名称。在从备份
继承的类中,的mytype
表示此继承类的类型
您对save
方法的描述似乎是正确的。它创建当前对象的副本,并将副本保存在名为copy
的字段中。副本的copy
字段设置为None
。也就是说,即使包含对象已经保存了副本,副本也没有自己保存的副本。此方法使用特殊符号{<…>}
,创建当前对象的副本
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;;