lua로 개발하다 보면 기본 namespace와 독립적인 공간이 필요할때가 있다.
즉, _G와 분리된 공간..
아래 소스는 이러한 처리를 해 주는 소스로, _G와 독립된 namespace를 갖도록 만들어 준다.
void luaL_namespace( lua_State *L)
{
lua_newtable( L); { /* T1: global */
lua_newtable( L); { /* T2: metatable */
lua_pushliteral( L, "__index"); {
lua_pushvalue( L, LUA_GLOBALSINDEX);
} lua_settable( L, -3); /* T2에 __index 항목을 추가한다. */
} lua_setmetatable( L, -2); /* T1를 metatable을 설정(T2) */
} lua_replace( L, LUA_GLOBALSINDEX); /* T1을 새로운 _G로 교환 */
}
{
lua_newtable( L); { /* T1: global */
lua_newtable( L); { /* T2: metatable */
lua_pushliteral( L, "__index"); {
lua_pushvalue( L, LUA_GLOBALSINDEX);
} lua_settable( L, -3); /* T2에 __index 항목을 추가한다. */
} lua_setmetatable( L, -2); /* T1를 metatable을 설정(T2) */
} lua_replace( L, LUA_GLOBALSINDEX); /* T1을 새로운 _G로 교환 */
}
참 재미있는 lua다~