racket/collects/wxme/private/class-help.ss
2007-01-19 02:05:17 +00:00

26 lines
775 B
Scheme

(module class-help mzscheme
(require (lib "class.ss"))
(provide init-accessible)
;; like `init-field', but makes a `get-' public method
;; instead of a public field
(define-syntax (init-accessible stx)
(syntax-case stx ()
[(_ id)
(identifier? #'id)
#'(init-accessible [id])]
[(_ [id . val])
(with-syntax ([get-id (datum->syntax-object
#'id
(string->symbol (format "get-~a" (syntax-e #'id)))
#'id)])
#'(begin
(init [(internal-id id) . val])
(define private-id internal-id)
(define/public (get-id) private-id)))]
[(_ binding ...)
#'(begin (init-accessible binding) ...)])))