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.
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 :12you 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