[Newbies] Populate a new array.
Michael van der Gulik
mikevdg at gulik.co.nz
Sat Mar 17 04:36:14 UTC 2007
Bert Freudenberg wrote:
> On Mar 15, 2007, at 10:54 , Michael van der Gulik wrote:
>
>>> Also, observing that "at:" is actually implemented in Object,
>>> which seems...odd!
>>
>>
>> It is a bit odd. An Object in the virtual machine resembles an array
>> of instance variables, and that method assigns to an instance
>> variable by number.
>
>
> Wrong. Any Squeak object is made of zero or more instance variables
> ("named variables") plus zero or more numbered variables ("indexed
> variables"). The difference is that the number of named variables is
> fixed for all objects of that class, but the number of indexed
> variables can be specified when creating an instance using #new:, so
> it can differ from instance to instance. Object>>at: lets you access
> those indexed variables. How else would you access these?
>
>> It's not often useful (and downright dangerous if you ask me)
>
>
> Huh? It provides the very basics of the system! If we Smalltalkers
> say "everything is an Object" we mean it. Literally. There is no
> special "array object" that is different from "regular objects".
> Rather, you can implement an array as an object that happens to have
> indexed variables:
>
> Object variableSubclass: #BertsArray
> instanceVariableNames: ''
> classVariableNames: ''
> poolDictionaries: ''
> category: 'Bert-Arrays'.
>
> (BertsArray new: 7) at: 5 put: 42
Thanks, Bert. I can't believe I've been Smalltalking for so many years
and not known that! I always just assumed that arrays were some special
case handled by the VM, like SmallIntegers.
Michael.
More information about the Beginners
mailing list