输出所有的环境变量

for n in pairs(_G) doprint(n)
end

输出为:

xpcall
debug
require
type
tonumber
getmetatable
io
os
print
string
_G
load
collectgarbage
rawset
rawlen
next
warn
_VERSION
arg
utf8
setmetatable
tostring
rawget
table
pcall
package
coroutine
loadfile
math
assert
error
select
dofile
rawequal
pairs
ipairs

1、动态名的全局变量

动态名中包含字段时,使用_G["io.read"]并不会得到read。需要自己实现

function getfield(f)local v = _Gfor w in string.gmatch(f, "[%a_][%w_]*") dov = v[w]endreturn v
endfunction setfield(f, v)local t = _Gfor w, d in string.gmatch(f, "([%a_][%w_]*)(%.?)") doif d == "." thent[w] = t[w] or {}t = t[w]elset[w] = vendend
endsetfield("t.x.y", 10)
print(t.x.y)
print(getfield("t.x.y"))
输出为:
10
10

2、全局变量声明

全局变量不需要声明。可以通过元表来监控对不存在变量的访问

setmetatable(_G, {__newindex = function(_, n)error("attempt to write to undeclard variable " .. n, 2)end,__index = function(_, n)error("attempt to read undeclared variable " ..n, 2)end
})print(a)
输出为:
E:\lua-5.4.2_Win64_bin\lua54.exe: test.lua:15: attempt to read undeclared variable a
stack traceback:[C]: in function 'error'test.lua:11: in metamethod 'index'test.lua:15: in main chunk[C]: in ?

不通过元方法来设置_G的变量


function decl(name, initval)rawset(_G, name, initval )
enddecl("a", 10)
print(a)
输出为:
10

检查设置不存在字段值是否是在main中进行

setmetatable(_G, {__newindex = function(t, n, v)local w = debug.getinfo(2, "S").whatif w ~= "main" and w ~= "C" thenerror("attempt to write to undeclared variable " .. n, 2)endrawset(t, n, v)end
})

3、非全局环境

对于非本地变量,会将变量放在 _ENV环境中。

当_ENV=nil时,禁止访问_ENV中的变量

local print, sin = print, math.sin
_ENV = nil
print(13)
print(sin(13))
print(math.cos(13))输出为:
13
0.42016703682664
E:\lua-5.4.2_Win64_bin\lua54.exe: test.lua:10: attempt to index a nil value (upvalue '_ENV')
stack traceback:test.lua:10: in main chunk[C]: in ?

_ENV指向当前环境,_G指向全局环境

4、环境与模块

模块中如果没有使用local,会污染全局环境。可以使用_ENV

local M = {}
_ENV = M
function add (c1, c2)return new(c1.r + c2.r, c1.i + c2.i)
end

lua学习笔记之环境相关推荐

  1. cocos2d-x lua 学习笔记(1) -- 环境结构

    Cocos2d-x 3.0超过环境的版本号来建立和前Cocos2d-x 2.0 差异较大的版本,从同时Cocos2d-x 3.0项目打包成apkAndroid的应用程序文件,步骤,构建环境有些乏味安德 ...

  2. cocos2d-x lua 学习笔记(1) -- 环境搭建

    Cocos2d-x 3.0以上版本的环境搭建和之前的Cocos2d-x 2.0 版差异较大的,同时从Cocos2d-x 3.0项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭建一次之后, ...

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

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

  4. 深度学习(二)theano学习笔记(1)环境搭建

    theano学习笔记(1)环境搭建 原文地址:http://blog.csdn.net/hjimce/article/details/46654229 作者:hjimce 搭建theano实属不易,因 ...

  5. Lua 学习笔记(一)

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

  6. 微信小程序连接物联网(二):NodeMCU Lua学习笔记

    索引 这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU 微信小程序连接物联网(二):NodeMCU L ...

  7. Go学习笔记_环境搭建

    Go学习笔记_环境搭建 Go背景知识 go的特点(官网): Build fast, reliable, and efficient software at scale- Go is an open s ...

  8. openCV2学习笔记---1.环境配置

    openCV2学习笔记-1.环境配置 openCV 是开源的计算机视觉代码库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成 ...

  9. lua 学习笔记---游戏开发第一步

    lua 学习笔记-从数组开始 数组 数组大小范围不一定需要在声明是确定,可以改变 一维数组 例 > array = {"Lua", "lualu"} &g ...

最新文章

  1. Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据
  2. uniapp 安卓和IOS退出App的方法
  3. 机器学习的一些很好的博客
  4. Scala多线程:使用线程池Executors提交Runnable任务代码示例
  5. boost::mp11::mp_replace_third相关用法的测试程序
  6. 数据结构 旅游规划(Dijkstra+Dfs)
  7. Android官方开发文档Training系列课程中文版:OpenGL绘图之响应触摸事件
  8. 造成美国断网的“凶手论坛”,终于关闭了DDoS版块
  9. 50欧姆线设计 高频pcb_高频电路布线的应对方法有哪些?
  10. python机器学习库sklearn——神经网络
  11. DSP原理学习笔记--第十四章--DSP算法及其实现
  12. 车辆维修管理系统mysql_4S店汽车维修管理系统的分析与设计(JSP+MySQL)
  13. 关于Intel酷睿(Core)品牌CPU的不同系列和不同代产品间的性能差异知识普及
  14. 拆解PowerApps - 请假申请 - 4
  15. 2019秋季PAT甲级题解
  16. 「电创云」:「空间优造」与「绿多多」「绿点」绿色社区
  17. IC基础——FIFO
  18. Android9很多游戏玩不了,不玩会后悔 目前最火的9款Android游戏(2)
  19. java虚拟机win10_主编解读win10系统Java虚拟机错误的详尽解决方法
  20. 日记:2021.11.22

热门文章

  1. 步步为营-68-asp.net简单练习(get set)
  2. “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
  3. PDOStatement 类 FETCH_* 系列
  4. Android测试环境配置
  5. python读取txt文件写入-python 读取、写入txt文件的示例
  6. python编程if语法-Python基本语法(if判断)
  7. python编程工具p-5款Python程序员高频使用开发工具推荐
  8. 从零开始学习python-从零开始学python
  9. python 画三维函数图-Python之Numpy:二元函数绘制/三维数据可视化/3D
  10. 学python需要英语基础吗-英语基础一般,如何才能学习C语言编程和Python