1. 变量与常量
Lua 中的变量默认是全局变量,可以使用 local
关键字声明局部变量。
name = "Alice" -- 全局变量
local age = 30 -- 局部变量
注意事项:建议使用 local
声明变量以避免污染全局命名空间。
2. 数据类型
Lua 支持基本数据类型如 number
、string
、boolean
、table
。
height = 1.75
isStudent = true
city = "New York"
易错点: Lua 中 nil
表示空值,访问不存在的表元素会返回 nil
。
3. 条件控制
Lua 使用 if
、elseif
和 else
进行条件判断。
if age > 18 then
print("Adult")
else
print("Minor")
end
注意事项:条件语句的结束使用 end
。
4. 函数
Lua 中的函数使用 function
定义,支持多返回值。
function greet(name)
return "Hello, " .. name
end
易错点:字符串拼接使用 ..
运算符。
5. 表(table)
表是 Lua 的唯一数据结构,可以用作数组、字典等。
person = {name = "Alice", age = 30}
print(person.name)
注意事项:使用 .
访问表的字段。
6. 元表(metatable)
元表用于扩展表的行为,可以实现操作符重载等。
mt = {
__add = function(a, b)
return {value = a.value + b.value}
end
}
setmetatable(a, mt)
setmetatable(b, mt)
c = a + b
注意事项:使用元方法需定义相应的运算符函数,例如 __add
。
7. 协程(coroutine)
Lua 支持协程,允许实现多任务并发。
co = coroutine.create(function()
for i = 1, 3 do
print(i)
coroutine.yield()
end
end)
注意事项:使用 coroutine.resume
和 coroutine.yield
控制协程执行。
8. 模块与包
Lua 使用 require
加载模块,模块通常返回一个表。
-- mymodule.lua
local M = {}
function M.greet(name)
return "Hello, " .. name
end
return M
注意事项:模块的内容通常封装在表中,并在末尾使用 return
返回。
高级与小众用法
闭包
Lua 支持闭包,允许函数嵌套并访问外层函数的局部变量。
function makeCounter()
local count = 0
return function()
count = count + 1
return count
end
end
counter = makeCounter()
print(counter()) -- 输出: 1
注意事项:闭包允许在函数外部保持局部状态。
环境(Environment)
Lua 允许为表设置环境,使用 setfenv
和 getfenv
函数操作环境。
env = {}
setfenv(1, env) -- 设置当前环境为 env
易错点: Lua 5.2 以上版本不再使用 setfenv
和 getfenv
。
元方法
元方法用于重载运算符。
mt = {
__index = function(table, key)
return "Key not found"
end
}
setmetatable(person, mt)
注意事项:使用元表时确保正确设置元方法函数。
垃圾回收控制
Lua 提供垃圾回收机制,使用 collectgarbage
控制回收。
collectgarbage("collect")
注意事项:使用 collectgarbage
控制内存管理。
错误处理
Lua 提供 pcall
和 xpcall
进行错误处理。
status, err = pcall(function() error("Something went wrong") end)
注意事项:pcall
返回布尔值表示成功或失败,xpcall
支持自定义错误处理函数。