刚接触 Lua 时,最容易卡住的往往不是语法量,而是它和 C、Python、JavaScript 这些常见语言不太一样的几条基础规则:变量默认全局、只有 nil 和 false 为假、table 同时承担数组和映射的角色。下面按“先能跑、再看类型、再补字符串和流程控制”的顺序整理一遍,适合拿着交互模式边试边记,也方便后面继续学函数、协程和模块时快速回看。
先跑起来:Lua 如何进入交互模式和执行脚本
Lua 官方入门页面:www.lua.org/start.html
安装完成后,可以用下面几种方式开始:
lua:直接进入 Lua 环境lua -i:进入交互式编程模式lua:执行指定脚本文件
如果是第一次接触,优先建议用交互模式。它会保留你刚刚定义过的变量,适合一边输入一边验证语法和函数行为。
变量、作用域与 8 种类型
Lua 是动态类型语言,变量本身没有固定类型。另一个很关键的点是:变量默认是全局的,如果只想在当前作用域使用,需要显式写上 local。

Lua 一共有 8 种类型:
nilbooleannumberstringfunctionuserdatathreadtable
可以使用 type() 查看变量类型,返回值本身是一个 string,内容就是上面 8 种类型之一。
最容易混淆的三类:nil、boolean、number
nil 表示没有任何值,也就是“空”。所有变量在未赋值之前,其值都是 nil;把 nil 赋给一个变量,也等同于删除该变量。
nil 既可以参与比较,例如 nil==nil = true,也可以直接作为条件判断,此时它等价于 false。
boolean 只有 true 和 false 两个值。Lua 的真假规则非常重要:只有 nil 和 false 为假,其他都为真,包括数字 0。
number 用于表示所有数字,约等于 double。
string 和 table 的基础认知
string 可以用双引号或单引号表示,写法上和 Python 类似;也可以用 [[]] 包起来,这样能在不转义的情况下保留内部格式,有点类似 Kotlin 的三引号字符串。
Lua 里的 string 还能直接参与数学运算,但前提是内容可以成功转换成 number,否则会报错。
table 是 Lua 里唯一的集合类型,通过 {} 创建。它既能当 Array 用,也能当 Map 用,而且后续还能扩展出更灵活的用法,比如模拟继承、多态等面向对象能力。
当 table 不指定 key 时,可以把它理解为数组,但它的自动索引从 1 开始;指定 key 时,则更像 Map。
访问 table 元素可以用 [],把某个 index 或 key 对应的 value 赋值为 nil,就表示删除这个元素。
这些运算符在 Lua 里值得单独记一下
Lua 大部分运算符都比较直观,但下面几个最好单独记住:
| 运算符 | 功能 |
|---|---|
~= | 不等于 |
# | 取 string 或 table 的长度 |
and | 逻辑与 |
or | 逻辑或 |
not | 逻辑非 |
其中 # 是 Lua 里很常见的写法,字符串长度和表长度都会频繁用到。
流程控制怎么写,为什么容易漏关键字
Lua 的流程控制并不复杂,但它不用花括号划定作用域,所以初学时最容易漏掉 then、do 和 end。
分支
if - then - else - end
循环
while - do - endrepeat - untilfor i=exp1,exp2,exp3 - do - endfor k,v in pairs(table) - do - end
pairs是一个内置函数,可以为table提供一个迭代器。
如果你写循环时总觉得“少了个括号”,大概率就是还没适应 Lua 这种以关键字结束代码块的风格。
函数也是变量:Lua 函数的几个关键规则
在 Lua 里,function 本身也是变量,所以同样遵循“默认全局、加 local 变局部”的规则。
函数的作用范围从关键字 function 开始,到 end 结束,同样不依赖花括号。
Lua 的函数在参数和返回值上都比较灵活:
- 可以接收任意数量参数
- 可以返回任意数量的值
- 参数列表在定义时给出
- 返回值不需要在定义里提前声明
- 参数列表可以用
...表示可变长度
这也是 Lua 后面写工具函数、封装接口时非常顺手的一点。
字符串处理:先记住这些内置函数
前面已经提到过字符串的声明、拼接和长度获取,但真正写脚本时,更常用的是标准库里这批内置函数。

| 函数名 | 功能 |
|---|---|
string.upper(arg) | 变大写字母 |
string.lower(arg) | 变小写字母 |
string.gsub(inputStr, findStr, replaceStr, [replaceCount]) | 找到并替换(指定次数) |
string.find(inputStr, findStr, [init, [end]]) | 查找并返回位置,两个返回值分别是 start 和 end |
string.reverse(arg) | 反转字符串 |
string.format(...) | 格式化输出(类似 printf) |
string.char(args) | ASCII 数字转字符串 |
string.byte(inputStr, [index]) | 指定字符转 ASCII |
string.len(arg) | 计算字符串长度 |
string.rep(arg) | 重复字符串 |
如果你刚开始学,最值得先记住的是四类:大小写转换、查找替换、格式化输出、长度与重复。它们已经能覆盖很多简单脚本场景。
原文里也提到,交互式编程模式很适合随手试这些函数。这个建议是对的,尤其像 string.find() 和 string.gsub() 这类“输入一变,结果就变”的函数,现场试一遍会比只背函数名更有效。
调试与输出:先会注释和 print 就够用
Lua 的单行注释使用 -- 标识,多行注释则结合 -- 和保留字符串格式的 [[]] 来写。
输出日志时,Lua 使用 print 函数;如果需要更多运行时信息,可以继续了解 debug 库提供的能力。
对于入门阶段,先把注释、print 输出和交互模式用熟,已经足够排查大部分基础语法问题。







