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) (super-new))) (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. Jay On Thu, Dec 16, 2010 at 6:51 AM, Robby Findler <ro...@eecs.northwestern.edu>wrote: > On Thu, Dec 16, 2010 at 12:22 AM, Mark Engelberg > <mark.engelb...@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 <j...@cs.byu.edu> Assistant Professor / Brigham Young University http://faculty.cs.byu.edu/~jay "The glory of God is Intelligence" - D&C 93
_________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev