[Newbies] Populate a new array.
Michael van der Gulik
mikevdg at gulik.co.nz
Thu Mar 15 09:54:01 UTC 2007
Blake wrote:
> Here's another one:
>
> I've created a method that returns an array of its own class:
>
> anArray: aQuantity
> | a |
> a := Array new: aQuantity.
> a size
> do: [:i | a at: i put: self class new].
> ^ a
>
> but, for a while, I was trying to make this a single line:
>
> ^ (Array new: aQuantity) do: [:item | item := stuff ]
Here, you're constantly assigning the variable "item" to new values, so
the array remains untouched. I guess in a perfect world, the compiler
shouldn't allow assignment to block parameters... I'm surprised that the
Squeak compiler allows this.
> 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. It's not often useful (and downright dangerous if you ask me),
but I've used it before (for example) to serialize the state of any
object in an image.
Michael.
More information about the Beginners
mailing list