Lua 语法核心特点
- 
轻量简洁:关键字极少,只有约 20 个。
 - 
动态类型 :变量没有类型,值才有类型。你可以直接写
a = 10,然后再写a = "hello"。 - 
解释执行:通常不需要编译,由 Lua 解释器直接运行。
 - 
"可嵌入性":设计初衷就是作为嵌入式扩展语言,能轻松与 C/C++、Java、C# 等主程序交互。
 - 
"多重编程范式":支持过程式、面向对象(通过 table 和 function)、函数式编程。
 
一、基础语法结构
1. 注释
注释是代码中不会被解释器执行的部分,用于说明。
lua
-- 这是单行注释
--[[
    这是多行注释
    可以写很多内容
]]
        2. 标识符与关键字
- 
标识符 :变量、函数的名字。规则:以字母或下划线开头,后跟字母、数字、下划线。区分大小写 (
myVar和myvar是不同的)。 - 
关键字(保留字):以下这些单词不能用作标识符。
text
and break do else elseif end false for function goto if in local nil not or repeat return then true until while 
3. 变量与数据类型
变量无需声明,赋值即创建。未赋值的变量值为 nil。
| 数据类型 | 描述 | 示例 | 
|---|---|---|
nil | 
表示无效值,相当于 null | a = nil | 
boolean | 
布尔值,只有 true 和 false | 
isOpen = true | 
number | 
数字(Lua 5.3+ 引入了 integer 子类型) | num = 10.5 或 count = 100 | 
string | 
字符串,用单引号或双引号包裹 | name = "Alice" | 
function | 
函数,是一等公民 | function f() end | 
table | 
Lua 中唯一的数据结构,可当数组、字典、对象使用 | t = {1, 2, 3} 或 t = {name="Bob"} | 
userdata | 
用于表示由宿主程序(如 C)创建的对象 | (通常不直接使用) | 
thread | 
协程,用于实现协作式多线程 | (进阶特性) | 
使用 type() 函数可以获取值的类型:
lua
print(type("Hello"))  -- > string
print(type(10.4))     -- > number
print(type(print))    -- > function
print(type(true))     -- > boolean
print(type(nil))      -- > nil
print(type({}))       -- > table
        二、核心语法详解
1. 控制流
a) 条件语句 (if, elseif, else)
lua
local score = 85
if score >= 90 then
    print("优秀")
elseif score >= 70 then -- 注意是 elseif,不是 else if
    print("良好")
else
    print("再接再厉")
end -- 必须以 end 结尾
        注意 :Lua 中 只有 nil 和 false 被视为假 ,数字 0 和空字符串 "" 都被视为真。
b) 循环语句
- 
while循环:lua
local i = 1 while i <= 5 do print(i) i = i + 1 end - 
repeat循环(相当于 do...while):lua
local i = 1 repeat print(i) i = i + 1 until i > 5 -- 直到条件为真时停止 - 
for循环:- 
数字 for:
lua
-- 从 1 开始,到 5 结束,步长为 1 for i = 1, 5, 1 do print(i) end -- 输出:1 2 3 4 5 -- 步长可为负 for i = 5, 1, -1 do print(i) end -- 输出:5 4 3 2 1 - 
泛型 for(用于遍历表):
lua
local t = {"a", "b", "c"} -- ipairs 用于遍历序列(连续数字索引的数组) for index, value in ipairs(t) do print(index, value) end -- 输出: -- 1 a -- 2 b -- 3 c local p = {name="Lua", version="5.4"} -- pairs 用于遍历所有键值对 for key, value in pairs(p) do print(key, value) end -- 输出(顺序可能不同): -- name Lua -- version 5.4 
 - 
 
2. 函数 (Function)
函数使用 function 关键字定义。
- 
定义与调用:
lua
-- 定义 function greet(name) return "Hello, " .. name .. "!" -- .. 是字符串连接符 end -- 调用 local message = greet("World") print(message) -- > Hello, World! - 
匿名函数与高阶函数:
lua
-- 匿名函数赋值给变量 local add = function(a, b) return a + b end print(add(5, 3)) -- > 8 -- 函数作为参数(高阶函数) function calculate(x, y, operation) return operation(x, y) end local result = calculate(10, 2, function(a, b) return a * b end) print(result) -- > 20 - 
多返回值:
lua
function getDimensions() return 1024, 768 end local width, height = getDimensions() print(width, height) -- > 1024 768 
3. 表 (Table) - Lua 的核心
Table 是 Lua 中唯一的数据结构,它非常灵活。
- 
作为数组(列表):
lua
local fruits = {"apple", "banana", "cherry"} print(fruits[1]) -- 注意:Lua 索引通常从 1 开始! > apple print(#fruits) -- # 运算符获取数组部分的长度 > 3 - 
作为字典(映射):
lua
local person = { name = "Alice", age = 30, ["home address"] = "123 Main St" -- 如果键包含特殊字符,需要用方括号和引号 } print(person.name) -- > Alice (点操作符,键必须是合法标识符) print(person["age"]) -- > 30 (方括号操作符,更通用) print(person["home address"]) -- > 123 Main St - 
混合使用:
lua
local mixed = { "value1", -- 自动获得索引 1 "value2", -- 自动获得索引 2 key1 = "value3", -- 键值对 key2 = "value4" } print(mixed[1], mixed.key1) -- > value1 value3 
三、重要概念
1. 作用域与 local 关键字
默认情况下,变量是全局的! 使用 local 关键字来创建局部变量,这是一个非常重要的最佳实践。
lua
globalVar = "I am global" -- 全局变量(避免使用)
local localVar = "I am local" -- 局部变量
function test()
    local funcVar = "Visible only in this function"
    print(funcVar)
end
test()
print(globalVar) -- 可以访问
print(localVar)  -- 可以访问
-- print(funcVar) -- 错误!funcVar 在这里不存在
        2. 模块化
你可以将代码写在不同的 .lua 文件中,然后用 require 函数加载它们。
- 
mymodule.lua:
lua
local M = {} -- 创建一个空的表来表示模块 function M.sayHello() print("Hello from module!") end local privateFunction = function() -- 这是一个私有函数,外部无法访问 end return M -- 返回这个表 - 
main.lua:
lua
local mymodule = require("mymodule") -- 加载模块(省略.lua扩展名) mymodule.sayHello() -- > Hello from module! 
总结
Lua 的语法精髓在于:
- 
简单:关键字少,结构清晰。
 - 
灵活 :
table一统天下,既可作数组也可作字典。 - 
实用:多返回值、匿名函数、泛型 for 循环等特性让代码写起来非常高效。
 - 
明确 :使用
local明确作用域,使用require实现模块化。 
要掌握 Lua,最重要的就是多练习使用 table 和 function,并时刻牢记使用 local 来声明变量。