LUA 環境
阿新 • • 發佈:2017-05-27
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 環境