2013-10-11 4 views
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;; 

В этом фрагменте кода есть несколько вещей, которые я не совсем понимаю.OCaml: Определение объекта и клонирование

  1. (self: 'mytype) self означает рекурсивный класс, но какова роль' mytype?

  2. Некоторые {} получают резервную копию, где копия по-прежнему отсутствует, и назначить ее для копирования?

спасибо !!

ответ

2

В C++, Java и JavaScript текущий объект, исполняющий этот метод, всегда называется this. В Smalltalk это называется self. В OCaml вы можете дать ему любое имя, которое вам нравится. Любое имя появляется в круглых скобках после object - это имя текущего объекта. В этом примере текущий объект имеет имя self. (Я не знаю, что вы подразумеваете под термином «рекурсивный класс».)

В некоторых случаях полезно иметь имя для типа текущего объекта. Опять же, вы можете присвоить ему любое имя, поставив : 'name после имени текущего объекта. В этом примере тип текущего объекта называется 'mytype. Имя не используется нигде в коде, но оно может использоваться, если код должен усложняться. Обратите внимание, что 'mytype - это не просто другое имя для типа класса backup. В классе, который наследует от backup, 'mytype представляет тип этого наследующего класса.

Ваше описание save способ кажется правильный. Он создает копию текущего объекта и сохраняет копию в поле с именем copy. Поле copy копии установлено в None. I.e., копия не имеет собственной сохраненной копии, даже если у содержащего объекта уже есть один. Этот метод использует специальную нотацию {<...>}, которая создает копию текущего объекта.

Смежные вопросы