目录
- `_G`
- `_VERSION`
- `assert(condition, message)`
- `collectgarbage(opt [, arg])`
- `dofile(filename)`
- `error(message [, level])`
- `getmetatable(object)`
- `ipairs(t)`
- `load(chunk [, chunkname [, mode [, env]]])`
- `loadfile(filename [, mode [, env]])`
- `next(table [, key])`
- `pairs(t)`
- `pcall(f, ...)`
- `print(...)`
- `rawequal(a, b)`
- `rawget(table, key)`
- `rawlen(v)`
- `rawset(table, key, value)`
- `require(modname)`
- `select(index, ...)`
- `setmetatable(table, metatable)`
- `tonumber(e [, base])`
- `tostring(v)`
- `type(v)`
- `xpcall(f, msgh [, ...])`
以下是 Lua 中基础函数的详细说明,按您提供的列表逐个解析:
_G
- 作用:全局变量表,存储所有全局变量。
- 示例:
print(_G) -- 输出全局表地址 _G.x = 10 -- 等同于全局变量 x = 10 print(x) --> 10
_VERSION
- 作用:返回当前 Lua 版本的字符串(如
"Lua 5.4"
)。 - 示例:
print(_VERSION) --> "Lua 5.4"
assert(condition, message)
- 作用:若条件为
false
或nil
,抛出错误(携带message
);否则返回所有参数。 - 示例:
assert(1 == 1, "Math is broken!") -- 正常执行 assert(nil, "Value is nil!") -- 抛出错误
collectgarbage(opt [, arg])
- 作用:控制垃圾回收器。
opt
为操作选项(如"collect"
执行回收,"count"
返回内存使用量)。 - 常用选项:
"collect"
: 执行完整垃圾回收。"count"
: 返回当前内存使用量(KB)。"stop"
: 暂停自动回收。"restart"
: 重启自动回收。
- 示例:
print(collectgarbage("count")) --> 输出当前内存使用量 collectgarbage("collect") -- 强制回收
dofile(filename)
- 作用:执行指定 Lua 文件,返回文件中的最后一个表达式的值。
- 示例:
-- 文件 test.lua 内容:return 42 local value = dofile("test.lua") print(value) --> 42
error(message [, level])
- 作用:抛出错误,
level
指定错误位置层级(默认为 1)。 - 示例:
error("Something went wrong!", 2)
getmetatable(object)
- 作用:返回对象的元表,若元表被保护则返回
nil
。 - 示例:
local t = {} print(getmetatable(t)) --> nil(默认无元表) setmetatable(t, { __index = someTable })
ipairs(t)
- 作用:按顺序遍历数组部分(从 1 开始,直到遇到
nil
)。 - 示例:
local t = { "a", "b", c = "d" } for i, v in ipairs(t) do print(i, v) --> 1 a, 2 b end
load(chunk [, chunkname [, mode [, env]]])
- 作用:将字符串或函数
chunk
编译为函数,不立即执行。成功返回函数,失败返回nil
和错误信息。 - 示例:
local func = load("print('Hello')") func() --> Hello
loadfile(filename [, mode [, env]])
- 作用:类似
load
,但从文件加载代码。 - 示例:
local func = loadfile("test.lua") func() -- 执行 test.lua
next(table [, key])
- 作用:遍历表中的键值对。返回下一个键和值,通常与
pairs
配合使用。 - 示例:
local t = { a = 1, b = 2 } local k, v = next(t) print(k, v) --> a 1(或其他键,无序)
pairs(t)
- 作用:遍历表的所有键值对(包括非数组部分)。
- 示例:
local t = { a = 1, b = 2 } for k, v in pairs(t) do print(k, v) --> a 1, b 2(顺序不确定) end
pcall(f, ...)
- 作用:保护模式调用函数
f
。返回布尔状态和结果/错误信息。 - 示例:
local success, result = pcall(function() error("Oops!") end) print(success) --> false print(result) --> "Oops!"
print(...)
- 作用:输出参数值到标准输出(参数转换为字符串,用制表符分隔)。
- 示例:
print("Hello", 42) --> Hello 42
rawequal(a, b)
- 作用:直接比较
a
和b
是否相等(不触发元方法)。 - 示例:
local t1 = {} local t2 = t1 print(rawequal(t1, t2)) --> true
rawget(table, key)
- 作用:直接获取
table[key]
(绕过元方法__index
)。 - 示例:
local t = {} print(rawget(t, "x")) --> nil
rawlen(v)
- 作用:直接获取长度(字符串长度或表的数组部分长度,不触发
__len
元方法)。 - 示例:
print(rawlen("abc")) --> 3 print(rawlen({1,2,3})) --> 3
rawset(table, key, value)
- 作用:直接设置
table[key] = value
(绕过元方法__newindex
)。 - 示例:
local t = {} rawset(t, "x", 10) print(t.x) --> 10
require(modname)
- 作用:加载模块(
.lua
或 C 库),避免重复加载。 - 示例:
local math = require("math") print(math.sqrt(4)) --> 2
select(index, ...)
- 作用:获取可变参数
...
的部分内容。select('#', ...)
返回参数个数。select(n, ...)
返回第n
个参数之后的所有参数。
- 示例:
print(select(2, "a", "b", "c")) --> b c
setmetatable(table, metatable)
- 作用:设置表的元表,返回表本身。
- 示例:
local t = {} setmetatable(t, { __add = function(a, b) return a + b end })
tonumber(e [, base])
- 作用:将值转换为数字(可指定进制
base
),失败返回nil
。 - 示例:
print(tonumber("42")) --> 42 print(tonumber("FF", 16)) --> 255
tostring(v)
- 作用:将值转换为字符串(可能触发
__tostring
元方法)。 - 示例:
print(tostring(42)) --> "42"
type(v)
- 作用:返回值的类型名称(如
"number"
、"table"
)。 - 示例:
print(type({})) --> "table"
xpcall(f, msgh [, ...])
- 作用:类似
pcall
,但提供错误处理函数msgh
(用于获取堆栈信息)。 - 示例:
local function errHandler(err) return debug.traceback("Error: " .. err) end xpcall(function() error("Fail!") end, errHandler)
以上是 Lua 基础函数的详细说明。不同 Lua 版本可能有细微差异(如 rawlen
在 5.2+ 引入),建议根据实际使用的版本参考官方文档。