1.概述
1.1 知识点
为什么新开Lua进阶知识系列
Lua语法知识那个系列,基本把语法层面的东西过了一遍。
包括变量、函数、表、模块、协程、元表、错误处理、版本差异等,这些东西能让我们把普通业务脚本写起来。
但真到项目里,尤其是游戏项目里,麻烦的经常不在“这个 API 怎么调”。
更常见的是:代码看着都对,状态却不知道从哪里串了。以及对一些Lua底层的机制不熟悉。
比如:
- 一张表只是多了一个引用,并没有复制出一份新数据。
- 配置表被某段业务顺手改了,后面所有地方都读到了脏数据。
- 文件热更了,按钮回调还握着旧函数。
- 旧协程还挂在那里,里面的 upvalue 也跟着活着。
- 缓存表把对象强引用住了,GC 想回收也没机会。
这些问题一开始很不起眼,脚本少的时候甚至看不出来有问题。但是等模块、UI、战斗、配置、热更都搅在一起,再查就会有点蛋疼了。
所以 Lua进阶知识 不是为了堆概念,而是把项目和面试中可能实际遇到的问题进行整理和归纳。
主要讲解内容
表和状态
- 表引用与共享
- 表拷贝与快照
- 表与数据结构取舍
- 遍历顺序
- 配置表边界
模块和热重载
- 模块生命周期
package.loaded缓存- 模块热重载
- 闭包和 upvalue 残留
- 旧对象和旧协程清理
运行时机制
- 元方法边界
- GC 和弱表
- 字符串拼接成本
- 错误边界
debug接口- Lua 层性能优化
这些内容都会尽量按项目里的问题来写。先看现象,再看原因,最后落到写代码时应该怎么避坑。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com