lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Jul 13, 2010, at 8:04 AM, Roberto Ierusalimschy wrote:

>> My guess is that they would only be pooled if they share the same prototype,
>> and do not use any upvalues, such as:
>> 
>> t = {}
>> for i = 1, 10 do
>>  t[i] = function() end
>> end
> 
> They may be reused even with upvalues, as long as they have the same
> upvalues; each prototype caches the last closure created with it.

So, I suppose this code creates one closure...

t = {}
local a
for i = 1, 10 do
  a = i
  t[i] = function() a = a + 1; return a end
end

and this code 10 closures...

t = {}
for i = 1, 10 do
  local a
  a = i
  t[i] = function() a = a + 1; return a end
end

Another argument against local by default!

e