On Mon, Oct 13, 2008 at 2:02 AM, Martin Beck
<martin.beck@hpi.uni-potsdam.de> wrote:
Craig Latta wrote:
>
> Hi Stef--
>
>> To my stupefaction I discovered that the classVariables of a class are
>> not the same as the ones of its metaclass.
>>
>> TheRoot classVarNames ~= TheRoot class classVarNames
>>
>> Does any body have some ideas why this is like that? For me this is a
>> conceptual bug.
>
> Actually, metaclasses don't really have class variables at all.
> Class variables are defined by Class, which is a sibling of Metaclass,
> not a superclass. There's a method in Behavior which just answers a new
> empty Set for classVarNames; this is what you're invoking when you
> evaluate [TheRoot class classVarNames].
>
However,
TheRoot classPool = TheRoot class classPool
evaluates to true...
Regards,
Martin
One fix is to add the following method:
------------8<-----------
!Metaclass methodsFor: 'class variables' stamp: 'eem 10/13/2008 12:37'!
classVarNames
"Answer a Set of the names of the class variables defined in the receiver's instance."
^thisClass classVarNames! !
------------8<-----------
c.f. Metaclass>>classPool.
Whoever said that the class variables of a metaclass should be those of Metaclass is very wrong. Code compiled in the context of a metaclass includes the class variables of the non-metaclass (metaclass's instance), otherwise one couldn't access class variables in class-side methods.