环境
 全局变量table
        lua把所有的全局变量存在一个table里,并把这个table赋值给一个全局变量_G
        _G也在这个全局变量的table里,它就是一个普通的全局变量
        可以用这种方法遍历所有全局变量 for k, v in pairs(_G) do print(k,v) end
        可以使用_G["全局变量名"]来访问全局变量,与直接访问一样效果
        可以通过对_G设置元表来控制对全局变量的访问行为
        _G只是个全局变量,对其重新赋值则它就是别的东西了,这种情况只能通过getfenv找回全局table了
 非全局的环境
        lua中每个函数都可以有自己的环境
        lua中加载每个程序块其实就是把这个程序块看作是一个函数来调用一下
        每个程序块最后都可以有一行return xxx
        如果有require后返回的就是这个xxx
        所以可以想象一个程序文件被加载就是一个函数被调用了,这个文件的内容整个就是一个大函数
        因为每个函数都可以有自己的环境,所以每个程序块都有自己的环境
        这也正是为什么会命名为setfenv、getfenv了
       setfenv(f, table)
            1.第一个参数如果是函数则改变这个函数的环境为第二个参数的table
            2.第一个参数如果是数字,则1代表当前函数,2代表调用自己的函数,以此类推
       getfenv(f)
            1.参数f的使用方法与setfenv一样
            2.返回当前环境的table
        setfenv(1, {})如果这样调用则所有环境变量都将无法访问,包括如print函数,因为环境table是空的
        继承环境环境:
            envt = {}
            setmetatable(envt, {__index = _G})
            setfenv(1, envt)
            print("hello")
        在程序块中调用setfenv(1,table)就会修改当前程序块的环境
        每个新创建的函数(包括闭包)的环境都默认继承了创建者的环境
        当改变当前环境后,后续创建的函数的环境都将随之改变
        利用默认继承的功能方便 的实现命名空间之类的功能
        可以来回切换多个环境来实现多套变量定义和值内容
        函数在查找要访问的变量时总是以这种顺序,局部->全局->环境table元表的__index来查找
        环境主要用于加载模块等环节,另外的一个主要用途就是当作一个独立的数据存储集全
 

lua学习笔记(九)的更多相关文章

  1. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

  2. Lua 学习笔记(一)

    Lua学习笔记 1.lua的优势 a.可扩张性     b.简单     c.高效率     d.和平台无关 2.注释 a.单行注释 --        b.多行注释 --[[  --]] 3.类型和 ...

  3. Lua学习笔记6:C++和Lua的相互调用

        曾经一直用C++写代码.话说近期刚换工作.项目组中的是cocos2dx-lua,各种被虐的非常慘啊有木有.     新建cocos2dx-lua项目.打开class能够发现,事实上就是C++项 ...

  4. Lua学习笔记4. coroutine协同程序和文件I/O、错误处理

    Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...

  5. 多线程学习笔记九之ThreadLocal

    目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...

  6. (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境

    Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境(一)注意:工程必须添加两个宏:“配置属性”/“C或C++”/“预处理器”/“预处理器定义”,添加两个宏:_CRT_SECURE_ ...

  7. MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九

    <Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次   SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...

  8. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...

  9. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  10. Lua学习笔记:面向对象

    Lua学习笔记:面向对象 https://blog.csdn.net/liutianshx2012/article/details/41921077 Lua 中只存在表(Table)这么唯一一种数据结 ...

随机推荐

  1. 小程序收集formid跳转后收集不到

    为了突破微信小程序模板消息限制,需收集到足够的推送码,即每次提交表单时获取到的formId.一个formId代表着开发者有向当前用户推送模板消息的一次权限.当表单组件中的属性report-submit ...

  2. 洛谷 P3955 图书管理员【模拟/思维】

    题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图 书编码恰好以读者的需求码结尾,那 ...

  3. 信息批量提取工具bulk-extractor

    信息批量提取工具bulk-extractor   在数字取证中,通常需要面对海量的数据,如几百GB甚至TB级别的数据.从这些海量数据中,提取有价值的数据是一个漫长.枯燥.繁琐的过程.Kali Linu ...

  4. [BZOJ2095]Bridges

    最大值最小,是二分 转化为判定问题:给定一个混合图,问是否存在欧拉回路 首先,有向图存在欧拉回路的充要条件是每个点的入度等于出度,现在我们有一个混合图,我们要做的就是给其中的无向边定向,使得它变成有向 ...

  5. 关于MapControl和PageLayout地图同步的问题

    按照ArcMap的处理方式,地图和制图是分两个页面的,他们之间通过共享同一个Map对象来实现地图同步,具体做法就是在PageLayoutControl的PageLayoutReplaced事件发生时, ...

  6. Linux文件名小写的好处(转)

    说明:来自老阮的<为什么文件名要小写>的文章,其实我觉得应该说是<Linux文件名为什么要小写>会更合适些. 一.可移植性 Linux 系统是大小写敏感的,而 Windows ...

  7. java随机生成字符串(字符随机生成类 生成随机字符组合)

    原文:http://www.jb51.net/article/45006.htm package p2p_web; import java.util.ArrayList; import java.ut ...

  8. Android使用FFMpeg实现推送视频直播流到服务器

    背景 在过去的2015年中,视频直播页的新宠无疑是户外直播.随着4G网络的普及和覆盖率的提升,主播可以在户外通过手机进行直播.而观众也愿意为这种可以足不出户而观天下事的服务买单.基于这样的背景,本文主 ...

  9. 控制流程完整性:给大家介绍一种“另类”的Javascript反分析技术

    写在前面的话 理解恶意软件的真实代码对恶意软件分析人员来说是非常有优势的,因为这样才能够真正了解恶意软件所要做的事情.但不幸的是,我们并不总是能够得到“真实”的代码,有时恶意软件分析人员可能需要类似反 ...

  10. scrapy爬虫程序xpath中文编码报错

    2017-03-23 问题描述: #选择出节点中“时间”二字 <h2>时间</h2> item["file_urls"]= response.xpath(& ...