Lua快速入门
安装
yum install -y readline readline-devel
curl -R -O http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zxf lua-5.1.4.tar.gz
cd lua-5.1.4
make all testLuaRocks
语法基础
- 变量声明
- nil
- 多重赋值
- 数值型
- 运算符
- 字符串
- 函数
- 表
- 元表、元方法
Lua 元表(Metatable) 和元方法(Metamethod) - 知乎 (zhihu.com)
Lua 元表(Metatable) | 菜鸟教程 (runoob.com)
【Lua进阶系列】lua元方法lua 元方法Lampard猿奋的博客-CSDN博客
void luaT_init (lua_State *L) {
static const char const luaT_eventname[] = { / ORDER TM */
"__index", "__newindex",
"__gc", "__mode", "__len", "__eq",
"__add", "__sub", "__mul", "__mod", "__pow",
"__div", "__idiv",
"__band", "__bor", "__bxor", "__shl", "__shr",
"__unm", "__bnot", "__lt", "__le",
"__concat", "__call"
};
int i;
for (i=0; i<TM_N; i++) {
G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
luaC_fix(L, obj2gco(G(L)->tmname[i])); /* never collect these names */
}
}当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键。如果__index包含一个表格,Lua会在表格中查找相应的键。
__newindex 元方法用来对表更新,__index则用来对表访问 。
当你给表的一个缺少的索引赋值,解释器就会查找__newindex 元方法:如果存在则调用这个函数而不进行赋值操作。
全局表 _G
布尔
逻辑与或非
b >10 and "yes" or "no"
分支和循环
userdata
thread
local与非local的区别
Lua的local变量探究 - 知乎 (zhihu.com)
Lua的upvalue和闭包_lua upvalue_风云来的博客-CSDN博客
lua - 在 Lua 中,使用和不使用 "local"关键字声明的本地函数之间有区别吗? - IT工具网 (coder.work)
Lua中local变量和非local变量的区别 - 威少小二orz - 博客园 (cnblogs.com)
语法进阶
- 官方文档查阅
- 多文件调用
- 迭代器
- string库
- table
- metatable元表
- coroutine
- IO库(读写文件)
Require多文件调用
- 运行指定文件
- 末尾不带扩展名
- 目录层级用“.”分隔
- 只会运行一次
- 从packa.path中的路径里查找
迭代器
ipars
pairs
next
string
string.byte()
string.char()
string.format()
string.len()
string.lower()
string.upper()
string.pack()
string.unpack()
string.rep()
string.reverse()
string.sub(str,start,end) --闭区间Lua弱引用
https://zhuanlan.zhihu.com/p/638008523
https://blog.csdn.net/jiumengdz/article/details/88427895?spm=
闭包
深入理解Lua的闭包一:概念、应用和实现原理_lua 闭包 self_MaximusZhou的博客-CSDN博客
Lua的闭包详解(终于搞懂了) - 风雨缠舟 - 博客园 (cnblogs.com)
解决闭包内存泄漏的方法有:
- 尽量减少闭包的使用;
- 尽量减少闭包内部变量的使用;
- 尽量减少闭包的嵌套;
- 尽量减少闭包的作用域;
- 使用弱引用;
- 定期清理不再使用的闭包;
- 使用垃圾回收机制。
闭包函数生成后即便执行完,upvalue也是无法释放的,需要闭包函数= nil,去除闭包函数对upvalue的引用,upvalue才能被gc掉。也就是local test = 闭包函数, test()--upvalue无法释放, test = nil --upvalue可以被释放
【【python技巧060】形象理解闭包,玩转闭包】 https://www.bilibili.com/video/BV1Vx4y1u7YX/?share_source=copy_web&vd_source=efea9015bf6407b70a083cf1401dd2dd
面向对象
- middleclass - 一个简单、轻量级的面向对象库,它为Lua提供了类和类的继承。
- 30log - 一个轻量级的面向对象库,它使用Lua的元表来实现面向对象编程。它提供了一种简单的方式来创建、继承和扩展类。
元表 元方法
源码分析
《lua设计与实现》蓝皮书
https://dreamanddead.github.io/lua-5.1-source-guide/index.html
探索Lua5.2内部实现_yuanlin2008的博客-CSDN博客
【Lua源码赏析】第一章 阅读源码准备 - 知乎 (zhihu.com)
Lua知识树整理————lua源码分析 - 陌冉 - 博客园 (cnblogs.com)
lua5.1源码解析-底层结构&协程_哔哩哔哩_bilibili
Let Us Build a Lua Interpreter (manistein.club)
(22 封私信 / 80 条消息) Manistein - 知乎 (zhihu.com)
资源推荐
书籍推荐
- 《Lua程序设计》
- 《自己动手实现 Lua : 虚拟机、编译器和标准库》
- 《Lua设计与实现》
- 《Nginx Lua开发实战》
- 《Nginx实战:基于Lua语言的配置开发与架构详解》
网站推荐
- Lua 教程 | 菜鸟教程
- Lua 5.3 参考手册
- LewisJEllis/awesome-lua: A curated list of quality Lua packages and resources. (github.com)
博文
开发框架
- OpenResty® - 开源官方站
- APISIX
- KONG