Skip to content

4.3 - 注册表

Lua提供了注册表,是一个在C代码中用来存储所需Lua值的预定义表。这个注册表通常使用伪索引 LUA_REGISTRYINDEX 来访问。所有C库都可以在这个表中存储数据,但是必须注意所选择的键要与其他库区分,以避免碰撞。通常你应该使用包含库名的字符串,或者使用一个带有你代码中C对象地址的 light userdata ,亦或使用你的代码所创建的Lua对象来当作注册表的键。与变量名的约定一样,注册表中的以下划线开头后跟大写字母的字符串Lua的保留键。

注册表中的数字键被用于引用机制(参见luaL_ref)和一些预定义值。因此,注册表中的数字键绝对不能用于其他目的。

当你创建一个新的Lua状态机,其注册表会附带一些预定义的值。这些预定义值的索引使用的整数键定义在lua.h中。定义的常量有:

  • LUA_RIDX_MAINTHREAD:状态机的Lua主线程在注册表中的索引位置。(在整个状态机中主线程一共只创建一次。)
  • LUA_RIDX_GLOBALS:全局环境在注册表中的索引位置。