CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
Lua速成班系统函数基础函数996引擎

Lua速成班 第十一课 系统函数 第一节

2026-10-30 23:26 作者:浮生梦 Lua速成班系统函数基础函数996引擎
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十一课 系统函数 第一节」,主讲:浮生梦。 课程体系:996 引擎传奇开发教学 · 威海旷世互娱教学基地

Lua 系统函数基础课程

一、全局变量 _G

_G 是 Lua 的全局变量,存储了整个 Lua 运行环境的全部全局内容。它是一个 table 类型,里面包含了所有预定义的函数和你自己定义的全局变量。

核心理解:当你在代码中写 name = "张三" 时,这个变量实际上被存入了 _G 表中。你可以通过 _G.name 来访问它,也可以直接用 name 访问,两者是等价的。

动态变量创建技巧:利用 _G 可以动态生成变量名。例如循环创建 name1、name2...name100 这样的变量,普通写法无法实现,但通过 _G["name" .. i] = 值 就可以做到。

练习题:

lua
-- 练习1:使用 _G 动态创建 10 个变量,名为 var1 到 var10,值分别为 10 到 100
-- 练习2:打印 _G 表中所有的键名,只打印前 5 个

二、版本号 _VERSION

_VERSION 用于获取当前 Lua 解释器的版本号,返回值是字符串如 "Lua 5.1"。

实际用途:在需要兼容不同 Lua 版本的代码中,可以通过判断版本号来执行不同的逻辑分支。例如 5.1 和 5.3 某些 API 有差异,可以用版本判断来分别处理。

练习题:

lua
-- 练习:判断当前版本如果是 5.1 则打印"使用旧版接口",如果是 5.3 则打印"使用新版接口"

三、错误处理 error

error 函数用于手动抛出错误并终止程序运行。它接收两个参数:错误信息字符串和可选的层级数字。

层级参数说明:默认层级为 1,表示错误定位在当前位置。设为 2 时,错误信息会指向调用当前函数的上一层位置,用于调试时追踪错误来源。

重要提醒:error 是调试工具,不是给用户看的提示。在实际运行环境中不要用 error 做业务逻辑判断,否则用户会看到报错而不是友好提示。

练习题:

lua
-- 练习1:写一个函数,当传入的参数小于 0 时,用 error 抛出"参数不能为负数"
-- 练习2:测试 level 参数为 1 和 2 时,错误提示的行号有什么不同

四、断言 assert

assert 是简化版的条件判断工具。它接收两个参数:判断条件和错误信息。如果条件为假(false 或 nil),就抛出错误信息;如果为真,则什么都不发生继续执行。

与 if 的区别:assert 用于开发阶段确保某些条件一定成立,不是用来替代 if 做业务分支的。代码中大量使用 assert 会让其他开发者困惑。

练习题:

lua
-- 练习1:用 assert 判断一个变量是否为数字类型,如果不是则提示"需要数字类型"
-- 练习2:结合 tonumber,先转换再 assert 判断转换是否成功

五、动态加载 dofile

dofile 用于加载并执行外部 Lua 文件。每次调用都会重新读取文件并执行,不做缓存。

与 require 的区别:require 只加载一次并缓存结果,dofile 每次都重新加载。高频调用 dofile 会消耗大量内存,适合用在需要动态更新脚本内容的场景。

练习题:

lua
-- 练习1:创建一个 test.lua 文件,里面写 print("文件已加载"),然后用 dofile 执行它
-- 练习2:修改 test.lua 内容,再次 dofile,观察是否执行了新内容

六、字符串编译 load

load 函数将字符串转换为可执行的函数。它不会立即执行,而是返回一个函数对象,你需要再调用这个函数才会执行。

安全警告:永远不要直接 load 用户输入的字符串,这会导致严重的安全漏洞。load 只用于加载你自己生成的、可信的代码片段。

loadfile 是 load 的文件版:它从文件读取内容再 load,同样是返回函数对象而非直接执行。

练习题:

lua
-- 练习1:用 load 将字符串 "return 1+1" 转为函数并执行,打印结果
-- 练习2:用 load 执行多行代码字符串,包含变量赋值和打印

七、参数处理 select

select 专门用于处理可变参数函数(...)。它有两种用法:

井号用法:select("#", ...) 返回可变参数的总个数

索引用法:select(n, ...) 返回从第 n 个参数开始的所有参数

负索引:select(-1, ...) 返回最后一个参数

练习题:

lua
-- 练习1:写一个函数接收任意数量参数,用 select("#") 打印参数总数
-- 练习2:用 select(2, ...) 获取从第2个参数开始的所有值
-- 练习3:用 select(-1, ...) 获取最后一个参数的值

八、类型转换 tonumber / tostring

tonumber 将字符串转为数字,转换失败返回 nil。tostring 将任意类型转为字符串表示。

性能提示:数字类型的运算速度比字符串快,虽然现代硬件差距很小,但在大量数据处理时仍建议优先使用数字类型。

转换技巧:字符串转数字除了 tonumber,还可以用 "123" * 1 这种数学运算强制转换,Lua 会自动处理。

练习题:

lua
-- 练习1:将字符串 "100" 转为数字,然后判断其是否大于 50
-- 练习2:尝试将 "abc" 转为数字,用 assert 判断转换是否成功
-- 练习3:用 .. 连接符和 tostring 两种方式,将数字 100 转为字符串

九、错误保护 pcall / xpcall

pcall(protected call)保护模式调用函数。它执行目标函数,如果出错不会中断程序,而是返回 false 和错误信息;如果成功返回 true 和函数返回值。

返回值:第一个值是布尔状态(成功 true / 失败 false),第二个值是错误信息或正常返回值。

xpcall 增强版:比 pcall 多一个错误处理函数参数。当目标函数出错时,会自动调用这个错误处理函数,你可以在里面记录日志或做清理工作。

应用场景:调用不确定是否稳定的函数(如用户提供的回调、网络请求结果处理)时使用,确保一个函数的错误不会导致整个程序崩溃。

练习题:

lua
-- 练习1:用 pcall 调用一个会出错的函数,根据返回值判断成功或失败
-- 练习2:用 xpcall 调用出错函数,并指定一个错误处理函数打印"已捕获错误"

课后作业(5道)

  1. 全局变量探索:遍历 _G 表,找出所有以 "print" 开头的函数名并打印出来
  1. 版本兼容:写一段代码,根据 _VERSION 自动选择使用 load 还是 loadfile(5.1用load,5.3用loadfile)
  1. 参数处理:写一个求和函数,接收任意数量数字参数,用 select 实现,要求能处理 0 个参数的情况(返回0)
  1. 类型安全:写一个函数,接收一个参数,用 tonumber 转换后用 assert 确保是有效数字,否则提示"无效数字",最后返回该数字的平方
  1. 错误保护:用 xpcall 调用一个读取文件的函数,出错时在错误处理函数中记录错误信息并返回默认值 0

本文为《Lua速成班》系列课程实录整理。想系统学习 996 引擎 Lua 开发,请查看课程中心与更多技术文章。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

Lua速成班系统函数

Lua速成班 第十一课 系统函数 第一节

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十一课 系统函数 第一节」,主讲:浮生梦。 课程体系:996…

2026-10-30 23:26 浮生梦
Lua速成班后端面向对象

Lua速成班 第九课 后端面向对象和事件推送

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第九课 后端面向对象和事件推送」,主讲:浮生梦。 课程体系:9…

2026-10-30 23:26 浮生梦
Lua速成班后端面向对象

Lua速成班 第十课 后端面向对象 class构造

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十课 后端面向对象 class构造」,主讲:浮生梦。 课程体…

2026-10-30 23:26 浮生梦
幂尔框架接口调用

print 大法:让代码自己交代问题

代码不说话, 让它自己说 。 print 是 Lua 战士的第一件武器——用好它,八成的 bug 不用看第二眼。 <styl…

2026-10-26 19:04 996 技术组
幂尔框架接口调用

事件推送:别问,等框架喊你

新手爱问「我怎么知道玩家上线了」—— 你不用知道,框架会喊你 。轮询是你去问,事件是它来叫:理解事件推送,才算入了框架的门。…

2026-10-26 19:04 996 技术组
幂尔框架接口调用

接口调用的本质:参数进去,结果出来

框架给你几百个接口, 本质都是同一件事:参数进去,结果出来 。把「调用约定」刻进肌肉,说明书再厚也不慌。 <style .i…

2026-10-26 19:04 996 技术组