Lua中基础函数使用详解

发布于:2025-04-05 ⋅ 阅读:(36) ⋅ 点赞:(0)

以下是 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)

  • 作用:若条件为 falsenil,抛出错误(携带 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)

  • 作用:直接比较 ab 是否相等(不触发元方法)。
  • 示例
    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+ 引入),建议根据实际使用的版本参考官方文档。


网站公告

今日签到

点亮在社区的每一天
去签到