4.5 – 注册表

Lua 提供了一个 注册表,这是一个预定义出来的表,可以用来保存任何 C 代码想保存的 Lua 值。 这个表可以用有效伪索引 LUA_REGISTRYINDEX 来定位。任何 C 库都可以在这张表里保存数据,为了防止冲突,你需要特别小心的选择键名。一般的用法是,你可以用一个包含你的库名的字符串做为键名,或者取你自己 C 对象的地址,以轻量用户数据的形式做键,还可以用你的代码创建出来的任意 Lua 对象做键。关于变量名,字符串键名中以下划线加大写字母的名字被 Lua 保留。

注册表中的整数键用于引用机制(参见 luaL_ref),以及一些预定义的值。因此,整数键不要用于别的目的。

当你创建了一个新的 Lua 状态机,其中的注册表内就预定义好了几个值。这些预定义值可以用整数索引到,这些整数以常数形式定义在 lua.h 中。有下列常数:

  • LUA_RIDX_MAINTHREAD: 注册表中这个索引下是状态机的主线程。(主线程和状态机同时被创建出来。)
  • LUA_RIDX_GLOBALS: 注册表的这个索引下是全局环境。