3.12 – Manipulating Environments

All global variables are kept in ordinary Lua tables, called environments. The initial environment is called the global environment. This table is always at pseudo-index LUA_GLOBALSINDEX.

To access and change the value of global variables, you can use regular table operations over an environment table. For instance, to access the value of a global variable, do

  1. lua_pushstring(L, varname);
  2. lua_gettable(L, LUA_GLOBALSINDEX);

You can change the global environment of a Lua thread using lua_replace.

The following functions get and set the environment of Lua functions:

  1. void lua_getfenv (lua_State *L, int index);
  2. int lua_setfenv (lua_State *L, int index);

lua_getfenv pushes on the stack the environment table of the function at index index in the stack. If the function is a C function, lua_getfenv pushes the global environment. lua_setfenv pops a table from the stack and sets it as the new environment for the function at index index in the stack. If the object at the given index is not a Lua function, lua_setfenv returns 0.