[plt-scheme] 299.105
> * Added `define-serializable-class[*]' to MzLib's "class.ss".
Great!
I have troubles with a subclass of a class that is just a wrapper for
hash-tables. I guess it's something simple, but I can't see why the
code below gives an error. Serializing hash-table% works, but
serializing its subclass fails even though both are serializable.
(Sorry, I haven't found a simpler example yet. Language is Pretty Big.)
;;;;;;;;;;;;;;;; BEGIN SAMPLE
(require (lib "class.ss")(lib "serialize.ss"))
;; generic hash-table class (object wrapper)
;;
(define-serializable-class*
hash-table% object% ()
(public put get remove count (table-for-each for-each) (table-map
map))
(field (table (make-hash-table 'equal)))
(define (put key v)
(hash-table-put! table key v))
(define get
(case-lambda
[(key failure-thunk) (hash-table-get table key failure-thunk)]
[(key) (hash-table-get table key (lambda () #f))]
))
(define (remove key)
(hash-table-remove! table key))
(define (count)
(hash-table-count table))
(define (table-for-each proc)
(hash-table-for-each table proc))
(define (table-map proc)
(hash-table-map table proc))
(super-new)
)
;; generic ordered collection class
;; stores keys and values and allows access to keys and value
;;
(define-serializable-class*
collection% hash-table% ()
(inherit for-each map)
(public add-item remove-item get-item count-items)
(define keys null)
(define (add-key key)
(set! keys (append keys (list key))))
(define (remove-key key)
(set! keys (remove key keys)))
(define (add-item key v)
(send this put key v)
(add-key key))
(define (remove-item key)
(send this remove key) (remove-key key))
(define (get-item key)
(cond ((number? key) (send this get (list-ref keys key)))
(else (send this get key))))
(define (count-items)
(send this count))
(super-new)
)
(define test (new collection%))
(serialize test)
;;;;;;;;;;;;;;;;;;; END SAMPLE
==> serialize: expects argument of type <serializable object>; given
#<procedure:43:2>