lua-users home
lua-l archive

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


On Sun, Nov 28, 2010 at 12:42 AM, David Kastrup <dak@gnu.org> wrote:
> Dirk Laurie <dpl@sun.ac.za> writes:
>
>> The following syntax:
>>
>>     ('a,b,c')('a+b+c') == function(a,b,c) return a+b+c end
>>
>> is available after doing this chunk:
>>
>>     getmetatable("").__call =
>>       function(arg,res)
>>         if #arg>0 then return load(arg.."=...; return "..res)
>>         else return load("return "..res)
>>         end
>>       end
>>
>> Dirk
>> (Apologies if someone has already pointed out this obvious trick.
>> I started reading the discussion somewhere in the middle.)
>
> It won't exactly work well in the context of closures.
>
> --
> David Kastrup
>
>
>

It could work in 5.2 though, right?

If we use the debug library upvaluejoin function.
I don't have Lua 5.2 compiled on hand, so I can't test it, but I think
that that will work.
We might have to do this:
function test()
local d=56
return ('a,b,c')(_ENV,'print(a,b,c,d)')
end
test()(1,2,3)-->should print 1,2,3,56