=====LUA===== ====C/C++==== ===Arrays=== myarray = {1,2,3}; corresponds to lua_createtable(L, 0, 3); int top = lua_gettop(L); // add '1' to the list lua_pushinteger(L, 1); lua_rawseti(L, top, 0); // add '2' to the list lua_pushinteger(L, 2); lua_rawseti(L, top, 1); // add '3' to the list lua_pushinteger(L, 3); lua_rawseti(L, top, 2); // and then some code to bind it to "myarray" ===Array of arrays=== An array with 10 entries each containing 2 entries: int num = 10; int sz = 2; lua_createtable(L, num, 0); int toptop = lua_gettop(L); for(int i = 1; i <= num; i++) { lua_createtable(L, 0, sz); int top = lua_gettop(L); for(int j = 1; j <= sz; j++) { char buf[10]; sprintf(buf, "%d-%d", i, j); lua_pushstring(L, buf); lua_rawseti(L, top, j); } lua_rawseti(L, toptop, i); } return 1; ===Fields (maps)=== foo = {} foo.hello = 'world' foo.bar = {} foo.bar.ping = 'pong' foo.bar.bas = {} foo.bar.bas.ding = 'ring' Corresponds to: int foo, bar, bas; // Create global 'foo' lua_newtable(L); lua_setglobal(L, "foo"); // Set foo.hello = 'world' lua_getglobal(L, "foo"); foo = lua_gettop(L); lua_pushstring(L, "world"); lua_setfield(L, foo, "hello"); // Create 'bar' in 'foo' lua_getglobal(L, "foo"); foo = lua_gettop(L); lua_newtable(L); lua_setfield(L, foo, "bar"); // Set foo.bar.ping = 'pong' lua_getglobal(L, "foo"); foo = lua_gettop(L); lua_getfield(L, foo, "bar"); bar = lua_gettop(L); lua_pushstring(L, "pong"); lua_setfield(L, bar, "ping"); // Create 'bas' in 'foo.bar' lua_getglobal(L, "foo"); foo = lua_gettop(L); lua_getfield(L, foo, "bar"); bar = lua_gettop(L); lua_newtable(L); lua_setfield(L, bar, "bas"); // Set foo.bar.bas.ding = 'ring' lua_getglobal(L, "foo"); foo = lua_gettop(L); lua_getfield(L, foo, "bar"); bar = lua_gettop(L); lua_getfield(L, bar, "bas"); bas = lua_gettop(L); lua_pushstring(L, "ding"); lua_setfield(L, bas, "ring"); lua_pop(L, 1); // pop 'foo' off the stack.