가끔 lua 스크립터를 사용할때 table을 복제할 필요가 있다.
이때 사용하면 좋은 방법을 소개한다.
// ti: 복제한 table이 위치한 stack 위치
int luaL_renewtable( lua_State *L, int ti)
{
lua_newtable( L); {
int ni = lua_gettop( L);
int luaL_renewtable( lua_State *L, int ti)
{
lua_newtable( L); {
int ni = lua_gettop( L);
for ( lua_pushnil( L); lua_next( L, ti); lua_pop( L, 1))
{
lua_pushvalue( L, -2); { /* key */
switch (lua_type( L, -2))
{
default : lua_pushvalue( L, -2); break; /* value */
case LUA_TTABLE: luaL_renewtable( L, lua_gettop(L) - 1);
}
} lua_rawset( L, ni);
}
} return 1;
}
을 사용해 table을 복제할수 있다. 해당 table에 저장된 모든 데이터가 복제 된다.
단, userdata는 포인터만 복제되므로 userdata에 연결된 데이터는 공유됨을 잊지말라~