[squeak-dev] re: About classVariables

Eliot Miranda eliot.miranda at gmail.com
Mon Oct 13 19:43:15 UTC 2008


On Mon, Oct 13, 2008 at 2:02 AM, Martin Beck <martin.beck at 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.

But a better fix is to move Class>>classVarNames to ClassDescription:
------------8<-----------
'From Croquet1.0beta of 11 April 2006 [latest update: #1] on 13 October 2008
at 12:41:36 pm'!

!ClassDescription methodsFor: 'class variables' stamp: 'eem 10/13/2008
12:41'!
classVarNames
"Answer a Set of the names of the class variables defined in the receiver."

^self classPool keys! !

Class removeSelector: #classVarNames!
------------8<-----------

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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20081013/57eedc2a/attachment.htm


More information about the Squeak-dev mailing list