[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [proposal] A statement that can return value (and can used in expr)
- From: Xavier Wang <weasley.wx@...>
- Date: Wed, 14 Dec 2011 04:39:16 +0800
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.