Lua语法小贴士(十)全局变量
来源:互联网 发布:威纳海关数据 编辑:程序博客网 时间:2024/06/05 17:39
Lua里我们可以随时声明或调用全局变量。
例如:
test = 1print(test)
当我们访问一个不存在的全局变量的时候,会返回nil,例如:
print(tst)
虽然很方便,但是往往会因为拼写错误而导致一些不容易发现的BUG。
Lua可以使用_G来表示全局变量所在的表,这样我们就可以修改_G表的__index和__newindex两个元方法(参考Lua语法小贴士(五)元表与元方法)来限制全局变量的访问。
local declaredNames = {}setmetatable(_G,{__newindex = function(t,n,v) if not declaredNames[n] then local w = debug.getinfo(2,"S").what if w ~= "main" and w ~= "C" then error("attempt to write to undeclared variable "..n, 2) end declaredNames[n]= true end rawset(t,n,v)end,__index = function(_, n) if not declaredNames[n] then error("attempt to read undeclared variable"..n, 2) else return nil endend,})
我们通过debug.getinfo(参考Lua语法小贴士(十一)debug库)获取了函数的类型,Lua表示是普通的lua函数,C表示是C函数,main是在主chunk里,也就是没有被function end包围的区域。
这样我们在主chunk里面声明全局变量就没有问题,例如:
testChunk = 23print(testChunk)
但是下面这段在函数里面访问未声明的全局变量时,就会报错:
local function a() funcTest = 1enda()
0 0
- Lua语法小贴士(十)全局变量
- Lua 全局变量
- lua全局变量
- Lua 全局变量
- Lua语法小贴士(二)string库
- Lua语法小贴士(三)魔法字符
- Lua语法小贴士(四)字符串缓冲
- Lua语法小贴士(六)迭代器
- Lua语法小贴士(七)错误处理
- Lua语法小贴士(八)协同程序
- Lua语法小贴士(九)table库
- Lua语法小贴士(十一)debug库
- Lua语法小贴士(十五)upvalue
- 11.C++调用Lua全局变量(表)
- systemverilog语法(十)
- 自学Lua(1)--Lua语法特点
- iOS笔记--oc语法5 (static全局变量与全局变量)
- lua 基础语法(一)
- Activity布局初步
- tjut 5878
- NOIP2013 华容道
- JAVA中mark()和reset()用法
- opencsv在解析csv时中文乱码问题的解决(opencsv-3.8.jar)
- Lua语法小贴士(十)全局变量
- 从源码出发:ScrollView实现以惯性滑动的形式滑动到任意位置/禁止惯性滑动/监听惯性滑动
- Picasso解析(2)-LruCache缓存分析
- PL/SQL 数据库访问的相关技术(1)
- Hunting Game(狩猎游戏)
- 80C51并行口结构与驱动 [附:按键消抖分析]
- C++ 从文件夹中读取文件
- Docker+OpenvSwitch走进VxLAN的世界
- Unity入门·(一)环境搭建