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,给它取任何您喜欢的

在这段代码中,有几点我不太理解

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

  • 某些{}获取一个备份副本,其中副本仍然为空,并将其分配给副本


  • 谢谢 < < /代码>。在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;;