[racket-dev] [racket] Question about fields in Racket OO

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Thu Dec 16 08:56:47 EST 2010

Does 'define' really mean 'make a field'? I thought fields had to be
specially designated so that get-field would know about them...

Yes, this program errors:

#lang racket

(define c%
  (class* object% ()
    (field [x 1])
    (define y 2)

(define o (new c%))

(field-names o)
(get-field x o)
(get-field y o)


I agree that 'define' is like making a field, but fields are something
special too.


On Thu, Dec 16, 2010 at 6:51 AM, Robby Findler
<robby at eecs.northwestern.edu>wrote:

> On Thu, Dec 16, 2010 at 12:22 AM, Mark Engelberg
> <mark.engelberg at gmail.com> wrote:
> > OK, it works when the set! occurs after the super-new.  I didn't think
> set!
> > would work at all in a class definition (as opposed to within a method);
> I
> > was thinking of the whole system of defining classes as more of a
> > declarative DSL that only allowed certain constructs.
> You've probably already figured this out, but the body of a class is a
> series of definitions and expressions like at the top-level but
> 'define' taking on the meaning of 'make a field', and a bunch of new
> definitions appearing. The new stuff says what the methods are, but
> everything else is just executed in sequence as if it were in the body
> of the initializer (if this were in Java, say).
> hth,
> Robby
> _________________________________________________
>  For list-related administrative tasks:
>  http://lists.racket-lang.org/listinfo/dev

Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University

"The glory of God is Intelligence" - D&C 93
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20101216/60df16a0/attachment.html>

Posted on the dev mailing list.