Thank you both for reply. Unfortunately, it seems I didn't describe my goal
well.

I want both (all) classes to have separate variables, not shared among
subclasses, but still initialized on class side, not instance side. So I
want those variables to be class-side variables, my problem is with their
initialization. I have a tree of classes, top class (superclass of the rest)
should have class-side variable initialized as empty collection, and almost
all it's subclasses to have, by default, also an empty colletion. But there
will be few classes in this tree, whose collections should contain
something.

So to return to my previous example... I want SomeClass class-side variable
"SomeCollection" to contain OrderedCollection()... SubClass along with many
more subclasses to also contain OrderedCollection... but also to have a
SpecificSubClass, whose class-side variable "SomeCollection" will contain
OrderedCollection(something, somethingElse...).

Jan


Sean P. DeNigris wrote
> What you created is a class-side instance variable, which is private to
> just that class. What you want is a class variable, which is shared by all
> subclasses and instances. You declare it in the class definition with
> #classVariableNames:. There is a very nice explanation of these basic (but
> confusing!) concepts in the "Pharo By Example" book.


Andrei Chis wrote
> Hi,
> 
> SomeClass and SubClass are two different objects.
> Based on your setup, if you do not call any initialize method, initially
> calling both  "SomeClass isOk" and  "SubClass isOk" should return nil.
> 
> Running "SomeClass initialize" initializes only the SomeClass object. So
> now "SomeClass isOk"  returns true and "SubClass isOk" returns nil, as its
> another object that has not been initialized.
> You get the same behaviour if you first call "SubClass initialize".
> Now "SomeClass
> isOk"  returns nil because you did not initialize the SomeClass object,
> but
> the SubClass.
> 
> Even if you add initialize in the SubClass class and call it first
> "SomeClass
> isOk" will still return false.
> SomeClass and SubClass are just two different objects of types SomeClass
> class and  SubClass class. It's the same behaviour that you get when you
> create two instances of these classes. Just because you create an instance
> of the type SubClass and call super initialize,
> it doesn't mean that another instance of SomeClass will be initialized.
> 
> Hope this makes sense/answers your question.
> 
> Cheers,
> Andrei





--
View this message in context: 
http://forum.world.st/class-initialization-and-class-side-variables-tp4822869p4822886.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.

Reply via email to