function foo()

print(g or "'g' is not defined!")

end

foo()

env = { g = 100, print = print }

setfenv(foo, env)  --设置foo的环境为表env

foo()

print(g or "'g' is not defined!")

输出结果:

'g' is not defined!

100

'g' is not defined!

函数环境

函数环境就是一个函数在运行时所能访问的“全局”变量的集合,装在一个

表中。在缺省状态下,一个函数与定义它的函数共享同一个环境;但是每个

函数都可以有自己独立的环境,通过setfenv来设定。在前面的代码中,函数foo的缺省环境里没有定义变量g,因此第一次执行foo, g为nil。随后,foo被指定了一个环境 { g = 100, print = print }。这个环境定义了(全局)变量g,以及打印函数print,因此第二次执行foo,g的值就是100。但是在定义函数foo的函数的环境下,g仍然是一个未定义的变量。函数环境是一个比较复杂的概念,建议读者结合示例与文档仔细体会。

应用

利用它可以实现“安全沙箱”执行不受信任的代码;另外Lua的模块

(module)的实现也依赖它。

lua环境变量的更多相关文章

  1. linux 安装并且设置环境lua环境变量

    在lua官网下载lua安装包并安装: http://www.lua.org/download.html 解压编译: wget http://www.lua.org/ftp/lua-5.3.2.tar. ...

  2. 【Lua学习笔记之:Lua环境搭建 Windows 不用 visual studio】

    Lua 环境搭建 Windows 不用 visual studio 系统环境:Win7 64bit 联系方式:yexiaopeng1992@126.com 前言: 最近需要学习Unity3d游戏中的热 ...

  3. cocos2dx && Lua 环境配置

    需要的材料: 1.vs2013 2.python-2.7.3(2.7.x高于2.7的版本可能会出现错误) 3.Sublime Text 2(破解的) 4.cocos2dx-3.2 步骤: 1.安装vs ...

  4. Nginx+lua环境搭建

    其实有点类似WampServer一站式安装包 wget http://openresty.org/download/ngx_openresty-1.7.10.1.tar.gz tar -zxvf ng ...

  5. sublime3+wamp配置php,(无需配环境变量)

    思来想去,最后还是决定给自己的手游加简单后端验证.好久没搞php了,最近搜了搜资料,发现现在php比几年前方便简单的多,有wampserver和sublime用.想想当年我还用记事本+phnow呢. ...

  6. Lua环境

    1.前言 Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”.这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现:另一个优点 ...

  7. Programming in lua 环境

    Lua 用一个名为environment 普通的表来保存所有的全局变量.(更精确的说,Lua在一系列的environment 中保存他的“global”变量,但是我们有时候可以忽略这种多样性)这种结果 ...

  8. 在lua环境中使用protobuf

    最近在cocos2dx的项目中,需要在LUA脚本层使用protobuf协议.官方已经推出了很多种语言的版本.但唯独LUA版本不全.于是开始研究protobuf在LUA下的实现,将完整的过程记录了下来, ...

  9. Lua环境配置和工具介绍

    官网地址:http://www.lua.org/ Lua环境配置方式: (一)环境变量配置方式: (1)官网下载LuaDist,并解压缩到 c:\ (目录可自定义) 例如:C:\ environmen ...

随机推荐

  1. BZOJ 1585: Earthquake Damage 2 地震伤害 网络流 + 最小割

    Description Farmer John的农场里有P个牧场,有C条无向道路连接着他们,第i条道路连接着两个牧场Ai和Bi,注意可能有很多条道路连接着相同的Ai和Bi,并且Ai有可能和Bi相等.F ...

  2. [转载]ext4文件系统的delalloc选项造成单次写延迟增加的分析

    转载http://www.cnblogs.com/cobbliu/p/5603472.html 最近我们的服务进程遇到kill -15后处于Z的状态,变为了僵尸进程,经过/proc/{thread_i ...

  3. sass使用中出现的问题

    问题一:ruby按照官方文档安装后更换gem源时,报错Error fetching https://gems.ruby-china.org/: bad response Not Found 404 ( ...

  4. SpringBoot 整合 Mybatis 进行CRUD测试开发

    今天来和大家分享下 Spring Boot 整合 MyBatis 的 CRUD 测试方法开发.因为 MyBaits 有两种开发形式,一种基于注解,一种基于 xml . SpringBoot配置文件也有 ...

  5. 36.分页及deep paging

    主要知识点 1.es分页 2.deep paging     一.es分页语法 size,from 这两个关键字 GET /_search?size=10 指定每页10条数据 GET /_search ...

  6. python类中属性逗号引发的类型改变

    不注意点了个逗号引发了类型改变 [shangbl@newsvn ~]$ cat test.py class AB1: a="a" class AB12: a="a&quo ...

  7. 邓_ PHP·笔记(函数总结)

    PHP 指 PHP:超文本预处理器(译者注:PHP: Hypertext Preprocessor,递归命名) PHP 是一种服务器端的脚本语言,类似 ASP PHP 脚本在服务器上执行 PHP 支持 ...

  8. hashlib模块 简单了解

    import hashlib '''不可逆加密''' password = 'wwwwww7777'.encode('utf8') word = hashlib.md5(password) # md5 ...

  9. Automatic Tuning of Memory Management

    4.2.2 Automatic Tuning of Memory Management Two memory management initialization parameters, MEMORY_ ...

  10. CvsHelper 使用指南

    用于读取和写入CSV文件的.NET库. 非常快速,灵活和易于使用. 支持读写自定义类对象. 入门 要安装CsvHelper,请从包管理器控制台运行以下操作. Install-Package CsvHe ...