zoukankan      html  css  js  c++  java
  • lua-设计与实现-8环境与模块

    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};
    
  • 相关阅读:
    Linux:mv命令
    Linux:cp -rp
    Linux:sed命令
    Linux:cut命令...未完待续
    Linux:xargs命令
    python动态获取对象的属性和方法 (转载)
    python 继承中的super
    HTTP认证机制(翻译)
    技术名词解释
    设计模式之代理模式
  • 原文地址:https://www.cnblogs.com/Jaysonhome/p/13396023.html
Copyright © 2011-2022 走看看