|
Rici Lake wrote:
The real index name is the last localvar; it is not in scope until the loop starts. Consequently, for loops correctly (imho) create a new index object on each loop, which in turn means that upvalues work correctly. In other words: timestable = {} for i = 1, 10 do timestable[i] = function(j) return i * j end end will do the right thing in lua 5.1, and something quite different in earlier versions.
Depends on how you interpret the for loop. If you interpret the loop as: do local i = 1 repeat timestable[i] = function(j) return i * j end i = i + 1 until i > 10 endThen the right thing is the behavior of Lua 5.0.2 (in fact, this is the way for is explained in the reference manual :-) ). You can easily have it the other way by explicitely declaring another local:
timestable = {} for i = 1, 10 do local k = i timestable[i] = function(j) return k * j end endThe new way just makes it more convenient. Well, I'm sure this new way will be documented in the 5.1 reference manual. :-) And the loop variable is not really created anew each iteration; the same register is reused. There is no performance penalty.
-- Fabio Mascarenhas