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
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
Ch Lamprecht a écrit :
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
You can read this to understand: http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-October/109809.h...
Math
beginners@lists.squeakfoundation.org