This seems like a trivial point because the class system doesn&#39;t have to track these things and they are in fact part of the closures of the methods, so I don&#39;t see in what sense they are &quot;fields&quot;. Perhaps I am blinded by my reading of the implementation. I certainly agree they are essentially fields, but I can&#39;t but think of them as closed-over variables.<div>
<br></div><div>Jay<br><br><div class="gmail_quote">On Thu, Dec 16, 2010 at 7:00 AM, Carl Eastlund <span dir="ltr">&lt;<a href="mailto:cce@ccs.neu.edu">cce@ccs.neu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
To quote the class* documentation:<br>
(<a href="http://docs.racket-lang.org/reference/createclass.html#%28part._clfields%29" target="_blank">http://docs.racket-lang.org/reference/createclass.html#%28part._clfields%29</a>)<br>
<br>
&quot;Each field, init-field, and non-method define-values clause in a<br>
class declares one or more new fields for the class. Fields declared<br>
with field or init-field are public.&quot;<br>
<br>
So only the public ones are accessible via get-field.<br>
<font color="#888888"><br>
Carl Eastlund<br>
</font><div><div></div><div class="h5"><br>
On Thu, Dec 16, 2010 at 8:56 AM, Jay McCarthy &lt;<a href="mailto:jay.mccarthy@gmail.com">jay.mccarthy@gmail.com</a>&gt; wrote:<br>
&gt; Does &#39;define&#39; really mean &#39;make a field&#39;? I thought fields had to be<br>
&gt; specially designated so that get-field would know about them...<br>
&gt; Yes, this program errors:<br>
&gt; #lang racket<br>
&gt; (define c%<br>
&gt;   (class* object% ()<br>
&gt;     (field [x 1])<br>
&gt;     (define y 2)<br>
&gt;     (super-new)))<br>
&gt; (define o (new c%))<br>
&gt; (field-names o)<br>
&gt; (get-field x o)<br>
&gt; (get-field y o)<br>
&gt; --<br>
&gt; I agree that &#39;define&#39; is like making a field, but fields are something<br>
&gt; special too.<br>
&gt; Jay<br>
&gt; On Thu, Dec 16, 2010 at 6:51 AM, Robby Findler &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Dec 16, 2010 at 12:22 AM, Mark Engelberg<br>
&gt;&gt; &lt;<a href="mailto:mark.engelberg@gmail.com">mark.engelberg@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; OK, it works when the set! occurs after the super-new.  I didn&#39;t think<br>
&gt;&gt; &gt; set!<br>
&gt;&gt; &gt; would work at all in a class definition (as opposed to within a method);<br>
&gt;&gt; &gt; I<br>
&gt;&gt; &gt; was thinking of the whole system of defining classes as more of a<br>
&gt;&gt; &gt; declarative DSL that only allowed certain constructs.<br>
&gt;&gt;<br>
&gt;&gt; You&#39;ve probably already figured this out, but the body of a class is a<br>
&gt;&gt; series of definitions and expressions like at the top-level but<br>
&gt;&gt; &#39;define&#39; taking on the meaning of &#39;make a field&#39;, and a bunch of new<br>
&gt;&gt; definitions appearing. The new stuff says what the methods are, but<br>
&gt;&gt; everything else is just executed in sequence as if it were in the body<br>
&gt;&gt; of the initializer (if this were in Java, say).<br>
&gt;&gt;<br>
&gt;&gt; hth,<br>
&gt;&gt; Robby<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Jay McCarthy &lt;<a href="mailto:jay@cs.byu.edu" target="_blank">jay@cs.byu.edu</a>&gt;<br>Assistant Professor / Brigham Young University<br><a href="http://faculty.cs.byu.edu/~jay" target="_blank">http://faculty.cs.byu.edu/~jay</a><br>
<br>&quot;The glory of God is Intelligence&quot; - D&amp;C 93<br>
</div>