保存对象二进制文件和检索后来
问题描述:
我有以下类:保存对象二进制文件和检索后来
(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,但无法理解如何实现这一点。
答
球拍对象系统有support for serialization。这意味着您的课程必须使用define-serializable-class
进行定义,并且需要执行externalize
和internalize
。 externalize
需要返回一个只包含可序列化数据的表示(除了它自己的类的实例外),看起来系统会完成剩下的工作。 internalize
方法需要采用该格式并相应地在新创建的实例上设置成员。
球拍似乎增加了一些信息,所以只要在解串数据的系统中定义了类,其余部分就会奇迹般地发生。
这就是我一直在寻找的东西。 – rnso