> 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
_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners