LUA 环境
LUA中环境是指一个函数执行的表,即一个函数在什么表中执行。
这里的函数是特殊的,是loadfile("x.lua")的返回值。
loadfile("x.lua")从x.lua文件加载源码,形成一个源码块,但没有执行。只有手动去执行它才会真正运行其中代码,如下:
local func = loadfile("x.lua")
func() --执行该源码,开始逐行运行x.lua中的代码,如 require, 函数外的print等。
如何设置环境呢,如下:
local env = {}
setfenv(func, env)
这样就设置了x.lua的执行环境为表env。这有二层意思:
1,执行func()后,env中就有了x.lua中所有的东西。
2,x.lua的视野被限制在了env中。env中没有的东西都不可用
示例如下:
1,rect.lua
Rect = {}
Rect.Init = function(self, x,y,w,h)
self.x = x
self.y = y
self.w = w
self.h = h
print("init------------", x, y, w, h)
end
2,testenv.lua
local func = loadfile("rect.lua")--加载源文件,并以函数的形式返回
local env = {}
setmetatable(env, {__index = _G})--继承全局环境,如果不继承则setfenv后无法使用LUA API,如print等
if type(func) == "function" then
setfenv(func, env)
func() --在环境env中执行源文件,执行后env中就有了Rect类
end
--生成一个新环境的好处是:执行时是在新环境(即新表)中执行的,
--生成数据和操作数据都是对新环境(新表)的操作,不会影响全局环境_G
local Rect = env.Rect
Rect:Init(,,,)
--也可以这样调用,类似_G["a"]的用法
env["Rect"]:Init(,,,)
--注意type(k) == "string"
for k, v in pairs(env) do
print(k, type(k)) -- Rect string
end
LUA 环境的更多相关文章
- 【Lua学习笔记之:Lua环境搭建 Windows 不用 visual studio】
Lua 环境搭建 Windows 不用 visual studio 系统环境:Win7 64bit 联系方式:yexiaopeng1992@126.com 前言: 最近需要学习Unity3d游戏中的热 ...
- lua 学习 (一 )Mac搭建lua环境和ide
今天开始学习lua 首先是搭建环境 和 我的hello world 首先 交代一下我用的是 Mac 系统 所以在Mac上安装lua 环境很方便的 lua Mointain Lion - Lua 5 ...
- VS2012+LUA环境搭建
1 .启动VS2012,选择C++下的"win32"项目类型中的"Win2控制台应用程序" 2.工具——选项——项目和解决方案——VC++目录——可执行程序(C ...
- Nginx+lua环境搭建
其实有点类似WampServer一站式安装包 wget http://openresty.org/download/ngx_openresty-1.7.10.1.tar.gz tar -zxvf ng ...
- VS2012配置Lua环境
1.VS2012配置BabeLua插件 2.VS2012配置Lua 1.VS2012配置BabeLua插件 BabeLua插件简介: 安装方法: 关闭VS2012后直接安装BabeLua插件. 下载地 ...
- [Lua]Mac系统上安装Lua环境
1.下载 Lua语言的官方网站 http://www.lua.org/ 下载最新版本的Lua环境 2.安装 解压下载包lua-5.3.1.tar.gz 打开终端Terminal 使用cd命令进入该目录 ...
- Mac 端配置 Lua 环境
一.设计目的 Lua 是一种轻量级的脚本语言,其目的是为了嵌入到程序中,从而为程序提供灵活的扩展和定制功能. 二.特性 轻量级:编译后仅仅 100 余K,可以很方便的嵌入到程序中. 可扩展:Lua 提 ...
- 将C注册到lua环境中使用
注册到lua的方式有两种,一种是lua解释器,如果支持动态链接,使用动态链接机制,将函数接口编译成动态链接库,然后将动态链接库放到lua的C路径(LUA_CPATH)中,然后在lua文件中直接使用 r ...
- ubuntu配置lua环境,并进行c与lua的相互调用
1.安装lua环境 先查看一下apt可获取的lua版本 我们选择lua5.1版本进行安装 sudo apt install lua5.1 安装完之后测试一下是否安装成功,如果可以正常使用,则lua环境 ...
- Lua环境配置和工具介绍
官网地址:http://www.lua.org/ Lua环境配置方式: (一)环境变量配置方式: (1)官网下载LuaDist,并解压缩到 c:\ (目录可自定义) 例如:C:\ environmen ...
随机推荐
- BZOJ1015: [JSOI2008]星球大战starwar【并查集】【傻逼题】
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...
- js禁用后退
history.pushState(null, null, document.URL); window.addEventListener('popstate', function() ...
- FastAdmin 的 API 可以分级吗?
FastAdmin 的 API 可以分级吗? 有小伙伴问 FastAdmin 的API 可以分别吗,使用 / 出现错误. Karson 的说明是: 完全支持的,默认是使用.进行分隔的,如果需要/,请开 ...
- yum命令集
升级相关命令: yum update : 安装所有更新软件 yum update xxx : 仅更新指定的软件 yum check-update : 列出所有可更新的软件清单 yum list : 列 ...
- ABP学习之路
ABP文档介绍 http://www.cnblogs.com/kid1412/p/AbpDocumentContent.html [ABP开源项目]--vue+vuex+vue-router+EF的权 ...
- 微服务架构 vs. SOA架构
面向服务架构(SOA)已经存在有些年头了,这是一种用于设计软件的伟大原则.在SOA中,所有组件都是独立自主的,并能为其他组件提供服务.要替换掉系统中的某些部分而不对整个系统造成较大的影响本是个难题,然 ...
- Jenkins的构建
每个项目的详情页会显示下图内容 左侧操作项没有太多需要说明,Changes选项在Multibranch pipeline的时候,会显示从git上获取到的提交历史,普通的pipeline还没有尝试 下 ...
- FPGA中的平方根
作为纯数字电路的FPGA,实现平方根是比较麻烦的.毕竟硬件不支持这种算法. 好在厂家的IP核中有相关的平方根IP库,所以用起来也很方便. 上图是在QUARTUS下调用库中的IP核,综合适配后的资源使用 ...
- 让html标签显示在页面上
用 <xmp></xmp> 标签包起来,里面的所有文字会原样显示出来 <xmp><b>1</b><div>2</div&g ...
- linux下 tomcat 日志乱码/中文链接404
1 日志乱码: JDK引用的设置 Java引用参数添加”-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8” 将上面参数添加到Catalina.sh中JAVA ...