[racket] Best practices for classes
I don’t know if you can do it with generic interfaces (as in racket/generic),
but you can make classes whose instances have struct-type properties such as prop:procedure and prop:sequence
(using interfaces as in racket/class, not racket/generic)
#lang racket
(define proc<%>
(interface* ()
([prop:procedure
(lambda (this . args)
(send/apply this proc args))])
proc))
(define proc%
(class* object% (proc<%>)
(super-new)
(define/public (proc x)
(displayln "this is the proc method of proc%")
x)))
(define seq<%>
(interface* ()
([prop:sequence
(lambda (this)
(send this get-sequence))])
get-sequence))
(define seq%
(class* object% (seq<%>)
(super-new)
(define/public (get-sequence)
(list 1 2 3))))
> (define p (new proc%))
> (p 1)
this is the proc method of proc%
1
> (define s (new seq%))
> (sequence-for-each displayln s)
1
2
3
On Oct 2, 2014, at 6:21 PM, Matthew Butterick <mb at mbtype.com> wrote:
> What's the best approach to:
>
> + defining a class whose instances can be used as procedures?
>
> (define ci (new proc-class%))
> (ci arg arg2 ... )
>
> + ... whose instances can be used as lists (or at least support direct iteration?)
>
> (define li (new listish-class%))
> (for-each displayln li)
> (map ci li)
>
> My intuition is "implement a generic interface..." But then it gets hazy.
>
>
>
>
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20141002/c559925a/attachment.html>