本文更新于2026-06-04,使用Lua 5.5.0。
- 基础函数
- asset
- ipairs
- next
- pairs
- tostring
- type
- coroutine
- coroutine.create
- coroutine.resume
- coroutine.wrap
- coroutine.yield
- io
- io.close
- io.flush
- io.input
- io.lines
- io.open
- io.output
- io.popen
- io.read
- io.tmpfile
- io.type
- io.write
- FILE:close
- FILE:flush
- FILE:lines
- FILE:read
- FILE:seek
- FILE:setvbuf
- FILE:write
- os
- os.date
- string
- string.byte
- string.char
- string.dump
- string.find
- string.format
- string.gmatch
- string.gsub
- string.len
- string.lower
- string.match
- string.rep
- string.reverse
- string.sub
- string.upper
- table
- table.concat
- table.insert
- table.move
- table.pack
- table.remove
- table.sort
- table.unpack
官方文档:https://www.lua.org/manual/5.5/
基础函数
asset
断言。不为真则终止后续执行。
asset(BOOL <, MESSAGE>)
ipairs
用于遍历表(数组形式)。
for i, v in ipairs(TABLE) do
end
实际返回:next, TABLE, 0。
next
用于遍历表。
local NEXTINDEX, NEXTVALUE = next(TABLE <, INDEX>)
pairs
用于遍历表(哈希表形式)。
for k, v in pairs(TABLE) do
end
实际返回:next, TABLE, nil。
打印。
print(<VALUE<, ...>>)
tostring
转换成字符串。
local STR = tostring(VALUE)
type
返回数据类型。
local STR = type(VALUE)
coroutine
coroutine.create
创建协程。不会启动协程。
local COROUTINE = coroutine.create(FUNCTION)
coroutine.resume
恢复执行协程。
local STATUS, RETURNVALUE<, ...>|YIELDVALUE<, ...>|FAIL = coroutine.resume(COROUTINE <, RESUMEVALUE<, ...>>)
第一次执行时,RESUMEVALUE作为coroutine.create的FUNCTION的参数传入。后续执行时,RESUMEVALUE作为coroutine.yield的返回值。
当协程正常退出或让出时,返回true及退出或让出时的返回值;当协程非正常退出时,返回false和错误信息。
coroutine.wrap
创建协程,返回包装函数。
local WRAPFUNCTION = coroutine.wrap(FUNCTION)
WRAPFUNCTION类似coroutine.resume,但参数只包括RESUMEVALUE,返回值只包括RETURNVALUE|YIELDVALUE。
coroutine.yield
暂停协程,让出执行权。
local RESUMEVALUE<, ...> = coroutine.yield(<YIELDVALUE <, ...>>)
io
API有两种风格:一种是基于文件句柄(io.METHOD),另一种是基于当前操作的文件(FILE:METHOD)。
io.close
关闭文件。
io.close(<FILE>)
如不指定FILE,则关闭默认输出文件。
等同于file:close()。
io.flush
将程序中的缓冲区数据刷新至文件。
io.flush()
等同于io.output():flush()。
io.input
设置默认输入文件。
io.input(<FILE|FILENAME>)
io.lines
以只读模式打开文件,返回迭代器函数。
local FUNCTION = io.lines(<FILENAME <, ...>>)
每次调用迭代器函数都会从文件返回一行。当泛型for循环结束时,会自动关闭文件。
io.open
打开文件。
local FILE <, FAIL> = io.open(FILE <, MODE>)
如打开失败,则返回nil。
io.output
设置默认输出文件。
io.output(<FILE|FILENAME>)
io.popen
运行外部进程,并返回从此进程读写的文件句柄。
local FILE = io.popen(PROGRAM <, MODE>)
MODE可为:
- a:追加。
- r:只读。
- w:只写。会清空文件。
- a+:读写追加。
- r+:读写。不清空文件,但会写覆盖。
- w+:读写。会清空文件。
io.read
从文件读取内容。
local STR = io.read(<FORMAT>)
FORMAT可为:
- a:读取余下所有内容。
- l:读取一行,不包括换行符。默认值。
- L:读取一行,包括换行符。
- n:读取一个数值。
- 整数:读取若干字节。
等同于io.input().read(<FORMAT>)。
io.tmpfile
返回可读写的临时文件。进程结束时会被自动删除。
local FILE = io.tmpfile()
io.type
返回文件的状态类型。
var STR = io.type(FILE)
返回值可为:
- closed file:关闭的文件。
- file:打开的文件。
- nil:文件句柄不存在。
io.write
写入文件。
io.write(<STR|NUMBER <, ...>>)
FILE:close
关闭文件。
FILE:close()
FILE:flush
将缓冲区数据刷新至文件。
FILE:flush()
FILE:lines
以只读模式打开文件,返回迭代器函数。
local FUNCTION = FILE:lines(<FILENAME <, ...>>)
每次调用迭代器函数都会从文件返回一行。当泛型for循环结束时,不会自动关闭文件。
FILE:read
从文件读取内容。
local STR = FILE.read(<FORMAT>)
FORMAT可为:
- a:读取余下所有内容。
- l:读取一行,不包括换行符。默认值。
- L:读取一行,包括换行符。
- n:读取一个数值。
- 整数:读取若干字节。
FILE:seek
设置和获取当前文件位置。
location POSITION = FILE:seek(<WHENCE <, OFFSET>>)
WHENCE可为:
- cur:当前位置。
- end:文件结尾。
- cur:文件开头。
FILE:setvbuf
设置输出文件的缓存模式。
FILE:setvbuf(MODE <,SIZE>)
MODE可为;
- full:全缓存,缓存满后才输出。
- line:行缓存,以行为单位输出。
- no:无缓存,直接输出。
FILE:write
写入文件。
FILE:write(<STR|NUMBER <, ...>>)
os
os.date
格式化时间。
local STR = os.date(FORMAT <, TIME>)
FORMAT使用"%"开头的格式化字符串。
string
也可以使用STRING:METHOD的面向对象形式。
string.byte
返回字符串的ASCII码。
local ASCII<, ...> = string.byte(STR <, START <, END>>)
START默认为1,END默认为START。
string.char
使用ASCII码组装字符串。
local STR = string.char(ASCII<, ...>)
string.dump
将函数序列化为二进制字符串。
local STR = string.dump(FUNCTION <, STRIP>)
如果STRIP为true,则不会包含所有调试信息,以节省空间。
string.find
查找子串。
local START, END = string.find(STR, PATTERN <, OFFSET <, PLAIN>>)
OFFSET为负数表示从结尾数起的偏移(含)。默认为1。
PLAIN为true则为纯文本匹配。默认为false。
string.format
格式化字符串。
local STR = string.format(FORMAT <, VALUE<, ...>>)
string.gmatch
全局匹配。返回一个迭代器,用来遍历所有匹配的值。
for VALUE<, ...> in string.gmatch(STR, PATTERN) do
end
string.gsub
全局替换。
local NEWSTR, COUNT = string.gsub(STR, PATTERN, VALUE <, LIMIT>)
string.len
字符串长度。
local N = string.len(STR)
string.lower
小写字符串。
local NEWSTR = string.lower(STR)
string.match
匹配子串。
local SUBSTR = string.match(STR, PATTERN <, OFFSET>)
OFFSET为负数表示从结尾数起的偏移(含)。默认为1。
string.rep
重复字符串。
local NEWSTR = string.rep(STR, N <, SEPARATOR>)
string.reverse
翻转字符串。
local NEWSTR = string.reverse(STR)
string.sub
字符串子串。
local SUBSTR = string.sub(STR, START <, END>)
START和END如指定,均包含此元素。START默认为1,END默认为-1。
string.upper
大写字符串。
local NEWSTR = string.upper(STR)
table
table.concat
拼接数组元素。拼接是元素必需为数字或字符串。
local STR = table.concat(TABLE <, SEPARATOR <, START <, END>>>)
START和END如指定,均包含此元素。
table.insert
向数组中插入元素。
table.insert(TABLE <, INDEX>, VALUE)
VALUE插入于INDEX索引。如不指定INDEX,则于末尾插入。
table.move
复制数组元素。
table.move(TABLE, START, END, INDEX <, OTHERTABLE>)
将下标区间[START, END]的数组元素复制至INDEX索引。如不指定OTHERTABLE,则为TABLE自身。
table.pack
将表打包至新表。新表的索引1为原表的拷贝,属性n为原表的大小。
local NEWTABLE = table.pack(TABLE)
table.remove
从数组中移除并返回一个元素。
local VALUE = table.remove(TABLE <, INDEX>)
如不指定INDEX,默认为末尾的元素。
table.sort
数组排序。
table.sort(TABLE <, COMPAREFUNCTION>)
table.unpack
拆解数组。
local VALUE<, ...> = table.unpack(TABLE <, START <, END>>)
