[Newbies] problems with scoping

Ramon Leon ramon.leon at allresnet.com
Mon Oct 23 22:33:27 UTC 2006


> Hi,
> I face a problem with variable scoping in block-closures:
> 
> arr := Array  withAll: #(1 2 3 4 5 ).
> blocks := arr collect: [ :i | [Transcript show: i] ].
> blocks do:[:item | item value].
> 
> This prints 55555 because blocks contains [Transcript show: 
> i] for all of its elements and accesses the current value of i.
> 
> I would like to have blocks contain
> [Transcript show: 1]
> [Transcript show: 2]
> [Transcript show: 3]
> etc.
> 
> so it would print 12345
> 
> TIA Christoph

Try this instead.

arr := Array  withAll: #(1 2 3 4 5 ).
blocks := arr collect: [ :i | [Transcript show: i] fixTemps ].
blocks do:[:item | item value].

Squeak doesn't have true block closures, fixTemps is the standard way around
this.

Ramon Leon
http://onsmalltalk.com  



More information about the Beginners mailing list