Hi,
I was reading a bit of code and I saw the message at:put: in Object so I wonder why it's here. For me it should rader be in Collection.
Thanks for setting me straight.
Best regards, Mathew
___________________________________________________________________________ Faites de Yahoo! votre page d'accueil sur le web pour retrouver directement vos services préférés : vérifiez vos nouveaux mails, lancez vos recherches et suivez l'actualité en temps réel. Rendez-vous sur http://fr.yahoo.com/set
math suen wrote:
Hi,
I was reading a bit of code and I saw the message at:put: in Object so I wonder why it's here. For me it should rader be in Collection.
Thanks for setting me straight.
Mathew,
It has to do with how objects are structures in Smalltalk. Objects can simply hold a fixed set of instance variable slots, or they can be "indexed" (ie hold a fixed-sized set of slots indexed by an integer) or a combination of the two (*). When you create a subclass of Object you normally do something like:
Object subclass: #MyClass instanceVariableNames: 'ivar1 ivar2' classVariableNames: '' poolDictionaries: '' category: 'My Category'
but if you instead do something like Array does:
Object variableSubclass: #MyIndexedClass instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'My Category'
This creates a class whose instances are "indexed" (that is, you can send them #at: and #at:put:). Now, if Object didn't have #at:put: we'd have to implement it in every indexed subclass. So, in some sense, #at:put: is there "just in case". If you send a non-indexed subclass #at:put: you'll normally get an error (unless it has overridden it to do something useful).
o := MyClass new. o at: 1 put: 'blah'
causes the error "Instances of MyClass are not indexable". But:
o := MyIndexedClass new: 10. o at: 1 put: 'blah'
works just fine. BTW, yes, you will get an error if you tried to send new: to MyClass rather than just new. Play with this code a bit. Inspect the objects being created to see how they differ. I hope that this helps...
David
(*) actually there are other options such as word-sized indexed etc
beginners@lists.squeakfoundation.org