Sorry, yes, "dict" should be "collection". On 02.08.2013, at 15:16, Clément Béra <bera.clement@gmail.com> wrote:
This is not a bug.
Here your variable methodScope is defined outside the block, therefore all the blocks and the method refers to the same variable when calling methodScope.
Yes, I understand that. I just wanted to make sure that's the intended functionality. The reason I ask is that the error isn't easy to spot and there's no cue that one might be doing something wrong (It's not my code by the way :P). Especially for newcomers this can be a tricky one. I totally agree with you that the variables belong to the block and should be declared there.
Your code is the same as if you wrote : | methodScope | methodScope := 1. methodScope := 2. At the end, methodScope is of course 2.
If you want the result : 1 2 you have to declare the variable in the block (then there are different variable named methodScope, actually 1 per activation of the block.
collection := OrderedCollection new. 1 to: 2 do: [ :index | | methodScope | methodScope := index. dict add: [ methodScope ] ]. collection do: [ :block | Transcript show: block value; cr ]
2013/8/2 Max Leske <maxleske@gmail.com>
I just came across this (possible) bug and I'm able to reproduce it in Pharo 2.0 and 3.0 with the latest PharoVM (found in a 1.3 with NBCog):
expected (by my feeble mind): 1 2
actual: 2 2
| methodScope | collection := OrderedCollection new. 1 to: 2 do: [ :index | methodScope := index. dict add: [ methodScope ] ].
collection do: [ :block | Transcript show: block value; cr ]
I'm aware that using method temps in this way is not good programming style (usually) but I still think this behavior is curious if not at least very likely to cause a lot of weird errors.
Should I open a bug report?
Cheers, Max