2017-03-16 75 views
0

我有以下类:保存对象二进制文件和检索后来

(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”对象作为一个二进制文件以后检索?如果是的话,我是否还需要保存stackClass%? (实际上,对象可能更加复杂,除了简单的数字或文本外,甚至可能还有其他对象,图像,文件等)。

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

回答

0

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

球拍似乎增加了一些信息,所以只要在解串数据的系统中定义了类,其余部分就会奇迹般地发生。

+0

这就是我一直在寻找的东西。 – rnso

相关问题