注册表的描述,借用PIL中的一段话:
registry 一直位于一个由 LUA_REGISTRYINDEX 定义的值所对应的假索引(pseudo-index)的位置。一个假索引除了他对应的值不在栈中之外,其他都类似于栈中的索引。Lua API 中大部分接受索引作为参数的函数,也都可以接受假索引作为参数—除了那些操作栈本身的函数,比如 lua_remove,lua_insert。例如,为了获取以键值 "Key" 保
存在 registry 中的值,使用下面的代码:
lua_pushstring(L, "Key");
lua_gettable(L, LUA_REGISTRYINDEX);
由于这个表是所有的lua库所共享的,所以key值也一定要注意。云大也给了一些去key值的参考方法。
函数中,取注册表键值有这样的代码,可以看出注册表存储在 global_State 结构的 l_registry 变量中
static TValue *index2addr (lua_State *L, int idx)
else if (idx == LUA_REGISTRYINDEX) /*注册表索引*/
return &G(L)->l_registry;