Add examples for most class clauses.
This commit is contained in:
parent
a6e3c01f53
commit
ad8b43e21f
|
@ -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")]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user