lua没有全局变量,为什么这样设计呢?
以这个文件为例说明 test.lua
-------------------------------------
a = 100;
local m = 4;
function foo()
local i = 5;
print(a, m, i);
function bar()
print(a, m, i);
end
end
首先整个文件是个函数,它本身有个默认的变量G(upval类型)。任何函数里面都可以再定义函数,变量会往最外层找它的出处,如果没有,则变成G['varname']。
所以以上的变量会是这样的:
对文件这个函数,有3个变量a, m, foo,函数名本身也是。
a => G['a'];
m => local;
foo => G['foo'];
对foo这个函数,有4个变量i, print, a, m, bar。
i => local
print => G['print'];
m => upval
bar => G['bar']
对bar这个函数,有4个变量print, a, m, i。
print => G['print'];
a => G['a'];
m => upval;
i => upval;
我们解释下什么是local和upval。
local是已经声明为local的局部变量,lua变量跟js有点类似,除非显示声明为局部变量,否则是其它类型。local这样很好理解。
upval是在本函数里没有声明,但是在外层有声明的变量。简单讲就是在外层是local,或已经是upval的,属于本层函数的变量,如foo里的m,bar里的i。
G本身已经是个upval,它的值是一个lua里面的hash table。
现在我们知道lua有两种类型了:local和upval。那如果加上数组后会怎么样呢? 比如上面的foo函数,m是upval,那么m['k']则是tabup。i是local,那么i['k']则是table。因此lua总共就4种类型 local, upval, table, tabup。因此任何看似全局变量的,其实是tabup,也就是G['var']。lua就是这样通过抽象把全局变量给抹掉了。
相关推荐
所有版本LUA源码 lua-5.3.5 lua-5.3.4 lua-5.3.3 lua-5.3.2 lua-5.3.1 lua-5.3.0 lua-5.2.4 lua-5.2.3 lua-5.2.2 lua-5.2.1 lua-5.2.0 lua-5.1.5 lua-5.1.4 lua-5.1.3 lua-5.1.2 lua-5.1.1 lua-5.1 lua-5.0.3 lua-...
ios版本将lua加密成luac
内含luaDll,luacom以及luaiconv源码。luaDll和luaiconv直接打开sln在Visual studio中即可进行编译。luacom可使用nmake进行编译。也可直接使用已经生成了的dll.
lua 反编译工具 用于学习lua 反编汇 游戏lua 解密
lua5.3(32位/64位)windows 预编译(exe/DLL) adding: lua5.3.5-x86/lua.exe (in=14336) (out=7311) (deflated 49%) adding: lua5.3.5-x86/lua.o (in=24873) (out=9654) (deflated 61%) adding: lua5.3.5-x86/lua...
JS和LUA交互,主要是JS和LUA交互实现模版,可以作为参考
LUAC 脚本加密 , 用于LUAC 脚本反编译,有用得同学可以下载,
luaapi lua中文
1、简单工厂模式lua实现 2、工厂方法模式lua实现 3、原型模式lua实现 4、建造者模式lua实现 5、单例模式lua实现 6、抽象工厂模式lua实现 结构型模式 1、装饰模式lua实现 2、代理模式lua实现 3、外观模式lua实现 4、...
lua学习资料lua学习资料lua学习资料lua学习资料
C语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 ...
包含多个lua版本,内置详细配置JDK教程,轻松解密LUA加密文件
lua for windows其实是一整套Lua的开发环境.Lua for Windows 为 Windows 系统下提供了 Lua 脚本语言的开发和运行环境。Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用...
lua解析器,方便lua开发
lua解密工具.apk是一款用于解密Lua脚本的工具,适用于Android操作系统。Lua是一种轻量级的脚本语言,常用于游戏开发、嵌入式系统和网络编程等领域。通过使用该工具,开发者可以对Lua脚本进行反编译、编辑和重新编译...
Lua 5.1.4。 含lua.exe、lua51.dll、luac.exe等。 有了它,你就可以愉快地在windows下玩lua啦
WowLua 是一个在魔兽世界里边运行 Lua 脚本的编辑工具环境,他功能包括: 交互式 Lua 解释器 多页脚本编辑器。 语法着色 输出重定向到 WowLua 的输出窗口 WowLua 的输出窗口 /wowlua 或 /lua 打开 WowLua。 /...
包含 LUA取参数数目、LUA取参数类型、LUA取参数值、LUA加返回值、LUA扩展栈。后续版本可能会根据需要进行适当的扩充。LUA(数据类型)。LUA虚拟机,提供对LUA代码进行编译/解释执行的功能。LUA类库常量(常量)。LUA...
在stm32f407开发板上移植lua脚本,实现一些基本功能