1. 程式人生 > >LUA 環境

LUA 環境

state value rep array 代碼 安全 cmod module tro

from http://www.jellythink.com/archives/580

int luaopen_EnvironIndexDemo(lua_State *L)
{
	lua_newtable(L);
	lua_replace(L, LUA_ENVIRONINDEX);
	luaL_register(L, "CModule", arrayFunc);
	return 1;
}

這個註冊函數比以前寫的註冊函數要多兩行代碼,先要創建一個新的table,然後調用lua_replace將新的table作環境table。然後調用luaL_register時,所有新建的函數都會繼承當前環境
static int SetValue(lua_State *L)
{
	// Lua傳遞的值,先檢查參數
	luaL_checkinteger(L, 1);
	lua_pushvalue(L, 1);
	lua_setfield(L, LUA_ENVIRONINDEX, "JellyThink");
	return 0;
}

// 從環境中取出對應的值
static int GetValue(lua_State *L)
{
	lua_getfield(L, LUA_ENVIRONINDEX, "JellyThink");
	return 1;
}
使用環境創建的引用,只是在本模塊中可見,這樣縮小了數據的使用範圍了,減小了數據被錯改的可能,增加了數據的安全性

LUA 環境