2017-03-16 74 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

相關問題