将对象保存到二进制文件并稍后检索

时间:2017-03-16 11:57:55

标签: scheme racket binaryfiles

我有以下课程:

(define stackClass%
  (class object% 
    (super-new)
    (init-field (mystack '(A B C)))      
    (define/public (push n)
      (set! mystack (cons n mystack)))
    (define/public (pop) 
      (cond [(empty? mystack)   #f]
            [else  (define res (car mystack))
                   (set! mystack (cdr mystack))
                   res] ))
    (define/public (get)
      mystack)   ))

我创建一个对象并改变它:

(define sc (new stackClass%))
(send sc push 1)
(send sc push 2)

我现在可以保存这个" sc" object作为稍后要检索的二进制文件?如果是,我还需要保存stackClass%吗? (实际上,除了简单的数字或文本之外,对象可能更复杂,甚至可能还有其他对象,图像,文件等)。

我检查了不同地方的文档,包括http://docs.racket-lang.org/binary-class/index.html,但无法理解如何实现这一目标。

1 个答案:

答案 0 :(得分:0)

球拍对象系统有support for serialization。这意味着您的课程必须使用define-serializable-class进行定义,并且需要实施externalizeinternalizeexternalize需要返回一个只包含可序列化数据的表示形式(实例除了它自己的类),系统似乎会完成其余的工作。 internalize方法需要采用该格式并相应地在新创建的实例上设置成员。

Racket似乎添加了一些信息,只要在反序列化数据的系统中定义了类,其余的就会神奇地发生。