Lua 是一种轻量级、高效的脚本语言 ,其解释器核心是用 C 语言编写的,因此具有出色的可移植性和嵌入性(可轻松集成到其他程序中)。以下是其核心语法特性:
一、基础语法特点
-
简洁的语法结构
- 语句以换行或分号结束,无需强制分号。
- 注释:
-- 单行注释
或--[[ 多行注释 ]]
。
-
动态类型系统
-
变量无需声明类型,类型与值绑定:
lualocal a = 10 -- 整数 a = "hello" -- 切换为字符串 a = 3.14 -- 切换为浮点数
-
-
变量作用域
-
默认全局变量,
local
关键字声明局部变量:luaglobal_var = 1 -- 全局变量 local local_var = 2 -- 局部变量
-
二、核心数据类型
Lua 仅有 8 种基础类型:
lua
nil -- 空值(类似 null)
boolean -- true/false
number -- 整数或浮点数(内部统一为双精度)
string -- 不可变字符串(用单引号或双引号)
function -- 函数(支持闭包)
table -- 表(核心数据结构,可模拟数组、字典、类等)
userdata -- 用户自定义数据(用于与 C 交互)
thread -- 协程(coroutine)
三、表(Table):核心数据结构
表是 Lua 的万能容器,可表示数组、字典、对象等:
lua
-- 数组形式(索引默认从 1 开始)
local arr = {10, 20, "apple"}
print(arr[1]) -- 输出 10
-- 字典形式
local dict = {name = "Lua", version = 5.4}
print(dict["name"]) -- 输出 "Lua"
-- 混合结构
local mix = {
"value1",
key = "value2",
[3] = 100 -- 显式指定数字索引
}
四、控制结构
-
条件语句
luaif a > 10 then print(">10") elseif a == 0 then print("=0") else print("<10") end
-
循环
lua-- while 循环 local i = 1 while i <= 5 do print(i) i = i + 1 end -- for 循环(数值) for i = 1, 5, 2 do -- 起始值, 结束值, 步长(默认 1) print(i) -- 输出 1, 3, 5 end -- 泛型 for(遍历表) for k, v in pairs(dict) do print(k, v) end
五、函数与闭包
-
函数定义
luafunction add(a, b) return a + b end -- 匿名函数 local mul = function(a, b) return a * b end
-
多返回值与可变参数
luafunction swap(a, b) return b, a -- 返回多个值 end function sum(...) -- ... 表示可变参数 local s = 0 for _, num in ipairs{...} do s = s + num end return s end
-
闭包
luafunction counter() local count = 0 return function() count = count + 1 return count end end local c = counter() print(c()) -- 输出 1 print(c()) -- 输出 2
六、元表(Metatable)与元方法
元表用于自定义表的操作行为(类似运算符重载):
lua
local t1 = {value = 5}
local t2 = {value = 3}
-- 定义元表的 __add 方法
local mt = {
__add = function(a, b)
return {value = a.value + b.value}
end
}
setmetatable(t1, mt)
setmetatable(t2, mt)
local t3 = t1 + t2
print(t3.value) -- 输出 8
七、协程(Coroutine)
Lua 原生支持协程(非抢占式多任务):
lua
local co = coroutine.create(function()
print("start")
coroutine.yield() -- 挂起协程
print("end")
end)
coroutine.resume(co) -- 输出 "start"
coroutine.resume(co) -- 输出 "end"
八、模块化
通过 require
加载模块:
lua
-- 定义模块 mymodule.lua
local M = {}
function M.hello()
print("Hello from module!")
end
return M
-- 使用模块
local mod = require("mymodule")
mod.hello()
总结
Lua 的语法简洁高效,核心特性包括:
- 轻量级:解释器仅数百 KB,适合嵌入式场景。
- 表驱动设计 :通过
table
和metatable
实现复杂逻辑。 - 协程支持:简化异步任务处理。
- 易嵌入性:通过 C API 可轻松嵌入其他程序(如游戏引擎、Nginx)。
典型应用场景:游戏脚本(如《魔兽世界》插件)、Redis 脚本、Nginx OpenResty 等。