Add examples for most class clauses.

This commit is contained in:
Asumu Takikawa 2012-06-29 14:38:57 -04:00
parent a6e3c01f53
commit ad8b43e21f

View File

@ -13,12 +13,13 @@
(define-syntax (defclassforms stx) (define-syntax (defclassforms stx)
(syntax-case stx (*) (syntax-case stx (*)
[(_ [* (form ...) (also ...)]) [(_ [* (form ...) (also ...) more ...])
#'(defform* (form ...) #'(defform* (form ...)
"See " @racket[class*] (sees also ...) "; use" "See " @racket[class*] (sees also ...) "; use"
" outside the body of a " @racket[class*] " form is a syntax error.")] " outside the body of a " @racket[class*] " form is a syntax error."
[(_ [form (also ...)]) more ...)]
#'(defclassforms [* (form) (also ...)])] [(_ [form (also ...) more ...])
#'(defclassforms [* (form) (also ...) more ...])]
[(_ form ...) [(_ form ...)
#'(begin (defclassforms form) ...)])) #'(begin (defclassforms form) ...)]))
@ -437,23 +438,199 @@ a syntax error.
@defclassforms[ @defclassforms[
[(inspect inspector-expr) ()] [(inspect inspector-expr) ()]
[(init init-decl ...) ("clinitvars")] [(init init-decl ...) ("clinitvars")
[(init-field init-decl ...) ("clinitvars" "clfields")] @defexamples[#:eval class-eval
[(field field-decl ...) ("clfields")] (class object%
[(inherit-field maybe-renamed ...) ("clfields")] (super-new)
[* ((init-rest id) (init-rest)) ("clinitvars")] (init turnip
[(public maybe-renamed ...) ("clmethoddefs")] [(internal-potato potato)]
[(pubment maybe-renamed ...) ("clmethoddefs")] [carrot 'good]
[(public-final maybe-renamed ...) ("clmethoddefs")] [(internal-rutabaga rutabaga) 'okay]))]]
[(override maybe-renamed ...) ("clmethoddefs")] [(init-field init-decl ...) ("clinitvars" "clfields")
[(overment maybe-renamed ...) ("clmethoddefs")] @defexamples[#:eval class-eval
[(override-final maybe-renamed ...) ("clmethoddefs")] (class object%
[(augment maybe-renamed ...) ("clmethoddefs")] (super-new)
(init-field turkey
[(internal-ostrich ostrich)]
[chicken 7]
[(internal-emu emu) 13]))]]
[(field field-decl ...) ("clfields")
@defexamples[#:eval class-eval
(class object%
(super-new)
(field [minestrone 'ready]
[(internal-coq-au-vin coq-au-vin) 'stewing]))]]
[(inherit-field maybe-renamed ...) ("clfields")
@defexamples[#:eval class-eval
(define cookbook%
(class object%
(super-new)
(field [recipes '(caldo-verde oyakodon eggs-benedict)]
[pages 389])))
(class cookbook%
(super-new)
(inherit-field recipes
[internal-pages pages]))]]
[* ((init-rest id) (init-rest)) ("clinitvars")
@defexamples[#:eval class-eval
(define fruit-basket%
(class object%
(super-new)
(init-rest fruits)
(displayln fruits)))
(make-object fruit-basket% 'kiwi 'lychee 'melon)]]
[(public maybe-renamed ...) ("clmethoddefs")
@defexamples[#:eval class-eval
(define jumper%
(class object%
(super-new)
(define (skip) 'skip)
(define (hop) 'hop)
(public skip [hop jump])))
(send (new jumper%) skip)
(send (new jumper%) jump)]]
[(pubment maybe-renamed ...) ("clmethoddefs")
@defexamples[#:eval class-eval
(define runner%
(class object%
(super-new)
(define (run) 'run)
(define (trot) 'trot)
(pubment run [trot jog])))
(send (new runner%) run)
(send (new runner%) jog)]]
[(public-final maybe-renamed ...) ("clmethoddefs")
@defexamples[#:eval class-eval
(define point%
(class object%
(super-new)
(init-field [x 0] [y 0])
(define (get-x) x)
(define (do-get-y) y)
(public-final get-x [do-get-y get-y])))
(send (new point% [x 1] [y 3]) get-y)
(class point%
(super-new)
(define (get-x) 3.14)
(override get-x))]]
[(override maybe-renamed ...) ("clmethoddefs")
@defexamples[#:eval class-eval
(define sheep%
(class object%
(super-new)
(define/public (bleat)
(displayln "baaaaaaaaah"))))
(define confused-sheep%
(class sheep%
(super-new)
(define (bleat)
(super bleat)
(displayln "???"))
(override bleat)))
(send (new sheep%) bleat)
(send (new confused-sheep%) bleat)]]
[(overment maybe-renamed ...) ("clmethoddefs")
@defexamples[#:eval class-eval
(define turkey%
(class object%
(super-new)
(define/public (gobble)
(displayln "gobble gobble"))))
(define extra-turkey%
(class turkey%
(super-new)
(define (gobble)
(super gobble)
(displayln "gobble gobble gobble")
(inner (void) gobble))
(overment gobble)))
(define cyborg-turkey%
(class extra-turkey%
(super-new)
(define/augment (gobble)
(displayln "110011111011111100010110001011011001100101"))))
(send (new extra-turkey%) gobble)
(send (new cyborg-turkey%) gobble)]]
[(override-final maybe-renamed ...) ("clmethoddefs")
@defexamples[#:eval class-eval
(define meeper%
(class object%
(super-new)
(define/public (meep)
(displayln "meep"))))
(define final-meeper%
(class meeper%
(super-new)
(define (meep)
(super meep)
(displayln "This meeping ends with me"))
(override-final meep)))
(send (new meeper%) meep)
(send (new final-meeper%) meep)]]
[(augment maybe-renamed ...) ("clmethoddefs")
@defexamples[#:eval class-eval
(define buzzer%
(class object%
(super-new)
(define/pubment (buzz)
(displayln "bzzzt")
(inner (void) buzz))))
(define loud-buzzer%
(class buzzer%
(super-new)
(define (buzz)
(displayln "BZZZZZZZZZT"))
(augment buzz)))
(send (new buzzer%) buzz)
(send (new loud-buzzer%) buzz)]]
[(augride maybe-renamed ...) ("clmethoddefs")] [(augride maybe-renamed ...) ("clmethoddefs")]
[(augment-final maybe-renamed ...) ("clmethoddefs")] [(augment-final maybe-renamed ...) ("clmethoddefs")]
[(private id ...) ("clmethoddefs")] [(private id ...) ("clmethoddefs")
[(abstract id ...) ("clmethoddefs")] @defexamples[#:eval class-eval
[(inherit maybe-renamed ...) ("classinherit")] (define light%
(class object%
(super-new)
(define on? #t)
(define (toggle) (set! on? (not on?)))
(private toggle)
(define (flick) (toggle))
(public flick)))
(send (new light%) toggle)
(send (new light%) flick)]]
[(abstract id ...) ("clmethoddefs")
@defexamples[#:eval class-eval
(define train%
(class object%
(super-new)
(abstract get-speed)
(init-field [position 0])
(define/public (move)
(new this% [position (+ position (get-speed))]))))
(define acela%
(class train%
(super-new)
(define/override (get-speed) 241)))
(define talgo-350%
(class train%
(super-new)
(define/override (get-speed) 330)))
(new train%)
(send (new acela%) move)]]
[(inherit maybe-renamed ...) ("classinherit")
@defexamples[#:eval class-eval
(define alarm%
(class object%
(super-new)
(define/public (alarm)
(displayln "beeeeeeeep"))))
(define car-alarm%
(class alarm%
(super-new)
(init-field proximity)
(inherit alarm)
(when (< proximity 10)
(alarm))))
(new car-alarm% [proximity 5])]]
[(inherit/super maybe-renamed ...) ("classinherit")] [(inherit/super maybe-renamed ...) ("classinherit")]
[(inherit/inner maybe-renamed ...) ("classinherit")] [(inherit/inner maybe-renamed ...) ("classinherit")]
[(rename-super renamed ...) ("classinherit")] [(rename-super renamed ...) ("classinherit")]