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

2010-12-16 Thread Robby Findler
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

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

2010-12-16 Thread Jay McCarthy
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)

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

2010-12-16 Thread Robby Findler
Yes, sorry -- define is for private fields, not public ones. (This is something that can easily trip people up, ie making fields when they really want to be making methods; but I don't have a good idea of how to fix it.) Robby On Thu, Dec 16, 2010 at 7:56 AM, Jay McCarthy jay.mccar...@gmail.com

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

2010-12-16 Thread Jay McCarthy
This seems like a trivial point because the class system doesn't have to track these things and they are in fact part of the closures of the methods, so I don't see in what sense they are fields. Perhaps I am blinded by my reading of the implementation. I certainly agree they are essentially

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

2010-12-16 Thread Robby Findler
There is one field per object, but one method (closure) per class. Otherwise, you're right; and that's just what fields are. :) Robby On Thu, Dec 16, 2010 at 8:08 AM, Jay McCarthy jay.mccar...@gmail.com wrote: This seems like a trivial point because the class system doesn't have to track these

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

2010-12-16 Thread Mark Engelberg
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. Now that you point it out

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

2010-12-15 Thread Robby Findler
set!? Try it in both positions (the commented out one and the other one): the thing to keep in mind is that the declaration in c% is also kind of like a set! that happens when the object is initialized. Robby #lang racket (define c% (class object% (field [f 1]) (define/public (get-f)