Add example of mixin form to guide documentation.

Closes PR 13445.
This commit is contained in:
Danny Yoo 2013-02-19 12:43:32 -07:00
parent e0650c43df
commit 796550bd9f

View File

@ -555,7 +555,37 @@ first sequence of @racket[interface-expr]s and produces a class that
implements the second sequence of @racket[interface-expr]s. Other implements the second sequence of @racket[interface-expr]s. Other
requirements, such as the presence of @racket[inherit]ed methods in requirements, such as the presence of @racket[inherit]ed methods in
the superclass, are then checked for the @racket[class] expansion of the superclass, are then checked for the @racket[class] expansion of
the @racket[mixin] form. the @racket[mixin] form. For example:
@interaction[
#:eval class-eval
(define choosy-interface (interface () choose?))
(define hungry-interface (interface () eat))
(define choosy-eater-mixin
(mixin (choosy-interface) (hungry-interface)
(inherit choose?)
(super-new)
(define/public (eat x)
(cond
[(choose? x)
(printf "chomp chomp chomp on ~a.\n" x)]
[else
(printf "I'm not crazy about ~a.\n" x)]))))
(define herring-lover%
(class* object% (choosy-interface)
(super-new)
(define/public (choose? x)
(regexp-match #px"^herring" x))))
(define herring-eater% (choosy-eater-mixin herring-lover%))
(define eater (new herring-eater%))
(send eater eat "elderberry")
(send eater eat "herring")
(send eater eat "herring ice cream")
]
Mixins not only override methods and introduce public methods, they Mixins not only override methods and introduce public methods, they
can also augment methods, introduce augment-only methods, add an can also augment methods, introduce augment-only methods, add an