2017-03-16 1 views
0

je classe suivante:Enregistrer un objet dans un fichier binaire et récupérer plus tard

(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) )) 

Je crée un objet et de le modifier:

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

Puis-je sauvegarder maintenant cet objet « sc » comme un fichier binaire à récupérer plus tard? Si oui, aurais-je besoin de sauvegarder le stackClass% également? (En réalité, les objets peuvent être beaucoup plus complexes et peuvent même avoir d'autres objets, images, fichiers, etc., en plus de simples chiffres ou de texte).

J'ai vérifié la documentation à différents endroits, y compris http://docs.racket-lang.org/binary-class/index.html, mais je ne comprenais pas comment y parvenir.

Répondre

0

Le système d'objet de raquette a support for serialization. Cela signifie que votre classe doit être définie avec define-serializable-class et qu'elle doit implémenter externalize et internalize. externalize doit renvoyer une représentation composée uniquement de données sérialisables (sauf les instances de sa propre classe) et il semble que le système fera le reste. internalize méthode doit prendre ce format et définir les membres sur une instance fraîchement créée en conséquence. Les raquettes semblent ajouter quelques informations pour que le reste se produise magiquement tant que la classe est définie dans le système qui désérialise les données.

+0

C'est ce que je cherchais. – rnso