Lua 是一种轻量级脚本语言,语法简单、易学,适合初学者快速上手。以下是 Lua 的基本语法,涵盖变量、数据类型、控制结构、函数和常用特性。
1. 基本结构
1.1 注释
Lua 支持单行注释和多行注释。
-- 这是单行注释
--[[
这是多行注释
可以用于注释多段代码
]]
1.2 区分大小写
Lua 是大小写敏感的语言。例如,var
和 Var
是两个不同的变量。
1.3 语句结束
Lua 的语句可以用换行符分隔,不需要使用分号 ;
。但如果希望将多个语句写在一行,可以用分号分隔。
print("Hello") -- 单行语句
a = 10; b = 20; print(a + b) -- 多语句分隔
2. 变量与数据类型
2.1 变量
Lua 是动态类型语言,变量不需要声明类型。
x = 10 -- 数字
name = "Lua" -- 字符串
is_active = true -- 布尔值
全局变量与局部变量
- 默认变量是全局变量。
- 使用
local
关键字声明局部变量。
a = 10 -- 全局变量
local b = 20 -- 局部变量
print(a, b)
2.2 数据类型
Lua 提供以下几种数据类型:
类型 | 描述 |
---|---|
nil | 空值,表示变量未赋值。 |
boolean | 布尔值,true 或 false 。 |
number | 数字类型,支持整数和浮点数。 |
string | 字符串。 |
table | 表,Lua 的核心数据结构(类似数组和字典)。 |
function | 函数类型。 |
userdata | 用于和 C 交互的特殊数据类型。 |
示例
x = nil -- 空值
is_valid = false -- 布尔值
age = 25 -- 数字
greeting = "Hello, Lua!" -- 字符串
类型检查
使用 type()
函数检查变量的类型。
print(type(10)) -- 输出:number
print(type("Lua")) -- 输出:string
print(type(nil)) -- 输出:nil
print(type(true)) -- 输出:boolean
3. 控制结构
3.1 条件语句
Lua 支持 if
、elseif
和 else
语句。
x = 10
if x > 5 then
print("x 大于 5")
elseif x == 5 then
print("x 等于 5")
else
print("x 小于 5")
end
3.2 循环语句
1. while
循环
i = 1
while i <= 5 do
print(i)
i = i + 1
end
2. for
循环
- 数值型
for
循环:
for i = 1, 5 do
print(i)
end
- 使用步长:
for i = 1, 10, 2 do
print(i) -- 输出 1, 3, 5, 7, 9
end
3. 泛型 for
循环(遍历表)
t = {"a", "b", "c"}
for index, value in ipairs(t) do
print(index, value)
end
4. repeat...until
循环
i = 1
repeat
print(i)
i = i + 1
until i > 5
4. 函数
4.1 定义与调用
function greet(name)
return "Hello, " .. name
end
print(greet("Lua")) -- 输出:Hello, Lua
4.2 匿名函数
multiply = function(a, b)
return a * b
end
print(multiply(3, 4)) -- 输出:12
4.3 可变参数函数
function sum(...)
local total = 0
for _, v in ipairs({...}) do
total = total + v
end
return total
end
print(sum(1, 2, 3, 4)) -- 输出:10
5. 表(Table)
Lua 的表是一种强大的数据结构,可以用作数组、字典或混合使用。
5.1 数组
arr = {10, 20, 30}
print(arr[1]) -- 输出 10 (Lua 的索引从 1 开始)
5.2 字典(键值对)
dict = {name = "Lua", version = 5.4}
print(dict["name"]) -- 输出:Lua
print(dict.version) -- 输出:5.4
5.3 遍历表
-- 遍历数组
for i, v in ipairs(arr) do
print(i, v)
end
-- 遍历字典
for k, v in pairs(dict) do
print(k, v)
end
5.4 表的操作
table.insert(arr, 40) -- 在数组末尾插入元素
print(arr[4]) -- 输出:40
table.remove(arr, 2) -- 删除第 2 个元素
print(arr[2]) -- 输出:30
6. 字符串操作
6.1 字符串连接
使用 ..
连接字符串。
str1 = "Hello"
str2 = "Lua"
print(str1 .. ", " .. str2) -- 输出:Hello, Lua
6.2 常用字符串函数
s = "Hello Lua"
print(#s) -- 返回字符串长度:9
print(string.upper(s)) -- 转为大写:HELLO LUA
print(string.lower(s)) -- 转为小写:hello lua
print(string.sub(s, 1, 5)) -- 提取子串:Hello
print(string.find(s, "Lua")) -- 查找子串:返回起始索引
7. 元表与元方法
元表允许我们为表定义自定义行为,例如运算符重载。
a = {x = 10}
b = {x = 20}
meta = {
__add = function(t1, t2)
return {x = t1.x + t2.x}
end
}
setmetatable(a, meta)
setmetatable(b, meta)
result = a + b
print(result.x) -- 输出:30
8. 协程
Lua 的协程是一种轻量级线程机制,支持协作式多任务。
co = coroutine.create(function()
for i = 1, 3 do
print("协程运行: ", i)
coroutine.yield() -- 暂停协程
end
end)
coroutine.resume(co) -- 输出:协程运行: 1
coroutine.resume(co) -- 输出:协程运行: 2
coroutine.resume(co) -- 输出:协程运行: 3
9. 模块
Lua 支持模块化编程,通过 require
导入模块。
定义模块
-- mymodule.lua
local mymodule = {}
function mymodule.greet(name)
return "Hello, " .. name
end
return mymodule
使用模块
local mymodule = require("mymodule")
print(mymodule.greet("Lua")) -- 输出:Hello, Lua
10. 小结
- Lua 的语法简单,适合快速开发。
- 核心特性包括动态类型、强大的表结构、协程、多种控制结构等。
- Lua 的轻量级特性使其非常适合作为嵌入式脚本语言。