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.
|