• Subject: How to transmit data between closures?
• From: libla <libla@...>
• Date: Fri, 19 Mar 2010 19:36:19 +0800

```The code is write by Lua:

function factory()
local i = 0
local a = function()
i = i + 1
print(i)
end
local b = function()
i = i * 2
print(i)
end
return a,b
end

a,b = factory()
a() --1
b() --2

Like this,a and b can transmit data by upvalues.But I don't know how to
write the factory function by C language.Like the example:

int a(lua_State *L){
double val = lua_tonumber(L,lua_upvalueindex(1));
lua_pushnumber(L,val + 1);
lua_replace(L,lua_upvalueindex(1));
printf("%f\n",val + 1);
return 0;
}
int b(lua_State *L){
double val = lua_tonumber(L,lua_upvalueindex(1));
lua_pushnumber(L,val * 2);
lua_replace(L,lua_upvalueindex(1));
printf("%f\n",val * 2);
return 0;
}
int factory(lua_State *L){
lua_pushnumber(L,0);
lua_pushcclosure(L,a,1);
lua_pushnumber(L,0);
lua_pushcclosure(L,b,1);
return 2;
}

The return value of two closures are different upvalues,if you register
factory in Lua,then write these code:
a,b = factory()
a() --1
b() --0

```