8.1环境
含义: 与环境相关的特殊变量一--Global表、env表、registry表以及UpValue 。
- Global表存放在lua_State 结构体中也称为G表。每个lua_State 结构体都有一个对应的G表。不用多说,这个表就是存放全局变量的。
- env表存放在Closure 结构体中,也就是每个函数有自己独立的一个环境。
- registry表是全局唯一的,它存放在global_State结构体中,这个结构体在整个运行环境中只有一个。
作用:
在讲解OP_GETGLOBAL以及OP_SETGLOBAL指令时说到,查找一个全局变量的操作,其实更精确地说,是在当前函数的en v表中查找:
8.2
8.2.2 require
做几件事:
1,在registry[ "_LOADED”]表中查找该库,如果已存在,return (等同于package.loaded[module_name] 吧)
2,遍历环境表中的loaders 来调用,如果加载的结果在Lua找中返回的是函数,停止遍历
3,调用lua_call尝试加载该模块。成功,则记录在registry[ "_LOADED”]
static const lua_CFunction loaders[] =
{loader_preload, loader_Lua, loader_C, loader_Croot, NULL};