1.Lua进阶知识概述

  1. 1.概述
    1. 1.1 知识点
      1. 为什么新开Lua进阶知识系列
      2. 主要讲解内容
        1. 表和状态
        2. 模块和热重载
        3. 运行时机制

1.概述


1.1 知识点

为什么新开Lua进阶知识系列

Lua语法知识那个系列,基本把语法层面的东西过了一遍。

包括变量、函数、表、模块、协程、元表、错误处理、版本差异等,这些东西能让我们把普通业务脚本写起来。

但真到项目里,尤其是游戏项目里,麻烦的经常不在“这个 API 怎么调”。
更常见的是:代码看着都对,状态却不知道从哪里串了。以及对一些Lua底层的机制不熟悉。

比如:

  • 一张表只是多了一个引用,并没有复制出一份新数据。
  • 配置表被某段业务顺手改了,后面所有地方都读到了脏数据。
  • 文件热更了,按钮回调还握着旧函数。
  • 旧协程还挂在那里,里面的 upvalue 也跟着活着。
  • 缓存表把对象强引用住了,GC 想回收也没机会。

这些问题一开始很不起眼,脚本少的时候甚至看不出来有问题。但是等模块、UI、战斗、配置、热更都搅在一起,再查就会有点蛋疼了。

所以 Lua进阶知识 不是为了堆概念,而是把项目和面试中可能实际遇到的问题进行整理和归纳。

主要讲解内容

表和状态

  • 表引用与共享
  • 表拷贝与快照
  • 表与数据结构取舍
  • 遍历顺序
  • 配置表边界

模块和热重载

  • 模块生命周期
  • package.loaded 缓存
  • 模块热重载
  • 闭包和 upvalue 残留
  • 旧对象和旧协程清理

运行时机制

  • 元方法边界
  • GC 和弱表
  • 字符串拼接成本
  • 错误边界
  • debug 接口
  • Lua 层性能优化

这些内容都会尽量按项目里的问题来写。先看现象,再看原因,最后落到写代码时应该怎么避坑。



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏