lua-users home
lua-l archive

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


2011/12/14 Luiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br>:
>> local a = (function(a, b) print "a statement" return a + b end)(10, 20) + 30
>
> Lua 5.1 will create a new closure every time this statement is execute.
> Lua 5.2 will not: it will resuse the closure.
>
> Try the code below in each version:
>
> for i=1,3 do
>        local f = function(a, b) print "a statement" return a + b end
>        local a = f(10, 20) + 30    + i
>        print(f,a)
> end
>

I mean, if Lua found a anonymous function don't assign to any value,
then just translate it into a new level with it's separate scope, like
this:

local a = (function(a, b) return a + b end)(10, 20) + 30
becomes:
do
   local a, b = 10, 20
   local ret = a  + b
end
local a = `ret` + 30

ret is in above scope. and its the only variable that "export" from
above scope. its will allow write a block that return a value. and can
be embed it into a expression.