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
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)
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
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
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
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
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)
7 matches
Mail list logo