<<< Randal said... Setting "each" to "nil" there does nothing, since you aren't updating the object that was originally in "each".
<< Marcus said... This is a pretty common misconception. It seems to come up once a month. I wonder why - mostly it's not people who are new to programming, who I would expect to be unfamiliar with the distinction between an object or value and the location it is stored in.>>
I was wondering exactly that myself. After my 'doh!' moment, when Randal explained what I was doing wrong, I was trying to work out why I had made the mistake. The conclusion I came to was that I was becoming so used to sending messages to objects, that I had confused myself into thinking that I was somehow sending 'become nil' to the object stored in :each.
Cheers AB
"Andy" == Andy Burnett andy.burnett@knowinnovation.com writes:
Andy> I was wondering exactly that myself. After my 'doh!' moment, when Randal Andy> explained what I was doing wrong, I was trying to work out why I had made Andy> the mistake. The conclusion I came to was that I was becoming so used to Andy> sending messages to objects, that I had confused myself into thinking that I Andy> was somehow sending 'become nil' to the object stored in :each.
In a system where #become: is a two-way swap, rather than one-way, you *never* want to send "become: nil". That'd break everything, since now the value of "nil" would be your other object. :) The "safe" way to "become:" something innocent is often "become: String new". Even so, it's (a) very slow on Squeak and (b) a bit shocking to the holder of the value, who still expects the old object at its referenced oop.
beginners@lists.squeakfoundation.org