我有以下课程:
(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,但无法理解如何实现这一目标。
答案 0 :(得分:0)
球拍对象系统有support for serialization。这意味着您的课程必须使用define-serializable-class
进行定义,并且需要实施externalize
和internalize
。 externalize
需要返回一个只包含可序列化数据的表示形式(实例除了它自己的类),系统似乎会完成其余的工作。 internalize
方法需要采用该格式并相应地在新创建的实例上设置成员。
Racket似乎添加了一些信息,只要在反序列化数据的系统中定义了类,其余的就会神奇地发生。