Lua中基础函数使用详解

目录

  • `_G`
  • `_VERSION`
  • [`assert(condition, message)`](#assert(condition, message))
  • [`collectgarbage(opt [, arg])`](#collectgarbage(opt [, arg]))
  • `dofile(filename)`
  • [`error(message [, level])`](#error(message [, level]))
  • `getmetatable(object)`
  • `ipairs(t)`
  • [`load(chunk [, chunkname [, mode [, env]]])`](#load(chunk [, chunkname [, mode [, env]]]))
  • [`loadfile(filename [, mode [, env]])`](#loadfile(filename [, mode [, env]]))
  • [`next(table [, key])`](#next(table [, key]))
  • `pairs(t)`
  • [`pcall(f, ...)`](#pcall(f, ...))
  • `print(...)`
  • [`rawequal(a, b)`](#rawequal(a, b))
  • [`rawget(table, key)`](#rawget(table, key))
  • `rawlen(v)`
  • [`rawset(table, key, value)`](#rawset(table, key, value))
  • `require(modname)`
  • [`select(index, ...)`](#select(index, ...))
  • [`setmetatable(table, metatable)`](#setmetatable(table, metatable))
  • [`tonumber(e [, base])`](#tonumber(e [, base]))
  • `tostring(v)`
  • `type(v)`
  • [`xpcall(f, msgh [, ...])`](#xpcall(f, msgh [, ...]))

以下是 Lua 中基础函数的详细说明,按您提供的列表逐个解析:


_G

  • 作用:全局变量表,存储所有全局变量。

  • 示例

    lua 复制代码
    print(_G)        -- 输出全局表地址
    _G.x = 10       -- 等同于全局变量 x = 10
    print(x)         --> 10

_VERSION

  • 作用 :返回当前 Lua 版本的字符串(如 "Lua 5.4")。

  • 示例

    lua 复制代码
    print(_VERSION)  --> "Lua 5.4"

assert(condition, message)

  • 作用 :若条件为 falsenil,抛出错误(携带 message);否则返回所有参数。

  • 示例

    lua 复制代码
    assert(1 == 1, "Math is broken!")  -- 正常执行
    assert(nil, "Value is nil!")       -- 抛出错误

collectgarbage(opt [, arg])

  • 作用 :控制垃圾回收器。opt 为操作选项(如 "collect" 执行回收,"count" 返回内存使用量)。

  • 常用选项

    • "collect": 执行完整垃圾回收。
    • "count": 返回当前内存使用量(KB)。
    • "stop": 暂停自动回收。
    • "restart": 重启自动回收。
  • 示例

    lua 复制代码
    print(collectgarbage("count"))  --> 输出当前内存使用量
    collectgarbage("collect")       -- 强制回收

dofile(filename)

  • 作用:执行指定 Lua 文件,返回文件中的最后一个表达式的值。

  • 示例

    lua 复制代码
    -- 文件 test.lua 内容:return 42
    local value = dofile("test.lua")
    print(value)  --> 42

error(message [, level])

  • 作用 :抛出错误,level 指定错误位置层级(默认为 1)。

  • 示例

    lua 复制代码
    error("Something went wrong!", 2)

getmetatable(object)

  • 作用 :返回对象的元表,若元表被保护则返回 nil

  • 示例

    lua 复制代码
    local t = {}
    print(getmetatable(t))  --> nil(默认无元表)
    setmetatable(t, { __index = someTable })

ipairs(t)

  • 作用 :按顺序遍历数组部分(从 1 开始,直到遇到 nil)。

  • 示例

    lua 复制代码
    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 和错误信息。

  • 示例

    lua 复制代码
    local func = load("print('Hello')")
    func()  --> Hello

loadfile(filename [, mode [, env]])

  • 作用 :类似 load,但从文件加载代码。

  • 示例

    lua 复制代码
    local func = loadfile("test.lua")
    func()  -- 执行 test.lua

next(table [, key])

  • 作用 :遍历表中的键值对。返回下一个键和值,通常与 pairs 配合使用。

  • 示例

    lua 复制代码
    local t = { a = 1, b = 2 }
    local k, v = next(t)
    print(k, v)  --> a 1(或其他键,无序)

pairs(t)

  • 作用:遍历表的所有键值对(包括非数组部分)。

  • 示例

    lua 复制代码
    local t = { a = 1, b = 2 }
    for k, v in pairs(t) do
      print(k, v)  --> a 1, b 2(顺序不确定)
    end

pcall(f, ...)

  • 作用 :保护模式调用函数 f。返回布尔状态和结果/错误信息。

  • 示例

    lua 复制代码
    local success, result = pcall(function() error("Oops!") end)
    print(success)  --> false
    print(result)   --> "Oops!"

print(...)

  • 作用:输出参数值到标准输出(参数转换为字符串,用制表符分隔)。

  • 示例

    lua 复制代码
    print("Hello", 42)  --> Hello  42

rawequal(a, b)

  • 作用 :直接比较 ab 是否相等(不触发元方法)。

  • 示例

    lua 复制代码
    local t1 = {}
    local t2 = t1
    print(rawequal(t1, t2))  --> true

rawget(table, key)

  • 作用 :直接获取 table[key](绕过元方法 __index)。

  • 示例

    lua 复制代码
    local t = {}
    print(rawget(t, "x"))  --> nil

rawlen(v)

  • 作用 :直接获取长度(字符串长度或表的数组部分长度,不触发 __len 元方法)。

  • 示例

    lua 复制代码
    print(rawlen("abc"))   --> 3
    print(rawlen({1,2,3})) --> 3

rawset(table, key, value)

  • 作用 :直接设置 table[key] = value(绕过元方法 __newindex)。

  • 示例

    lua 复制代码
    local t = {}
    rawset(t, "x", 10)
    print(t.x)  --> 10

require(modname)

  • 作用 :加载模块(.lua 或 C 库),避免重复加载。

  • 示例

    lua 复制代码
    local math = require("math")
    print(math.sqrt(4))  --> 2

select(index, ...)

  • 作用 :获取可变参数 ... 的部分内容。

    • select('#', ...) 返回参数个数。
    • select(n, ...) 返回第 n 个参数之后的所有参数。
  • 示例

    lua 复制代码
    print(select(2, "a", "b", "c"))  --> b   c

setmetatable(table, metatable)

  • 作用:设置表的元表,返回表本身。

  • 示例

    lua 复制代码
    local t = {}
    setmetatable(t, { __add = function(a, b) return a + b end })

tonumber(e [, base])

  • 作用 :将值转换为数字(可指定进制 base),失败返回 nil

  • 示例

    lua 复制代码
    print(tonumber("42"))      --> 42
    print(tonumber("FF", 16)) --> 255

tostring(v)

  • 作用 :将值转换为字符串(可能触发 __tostring 元方法)。

  • 示例

    lua 复制代码
    print(tostring(42))  --> "42"

type(v)

  • 作用 :返回值的类型名称(如 "number""table")。

  • 示例

    lua 复制代码
    print(type({}))  --> "table"

xpcall(f, msgh [, ...])

  • 作用 :类似 pcall,但提供错误处理函数 msgh(用于获取堆栈信息)。

  • 示例

    lua 复制代码
    local function errHandler(err)
      return debug.traceback("Error: " .. err)
    end
    xpcall(function() error("Fail!") end, errHandler)

以上是 Lua 基础函数的详细说明。不同 Lua 版本可能有细微差异(如 rawlen 在 5.2+ 引入),建议根据实际使用的版本参考官方文档。

相关推荐
慢慢沉1 天前
Lua(数据库访问)
开发语言·数据库·lua
慢慢沉1 天前
Lua协同程序(coroutine)
lua
慢慢沉2 天前
Lua元表(Metatable)
lua
慢慢沉3 天前
Lua(字符串)
开发语言·lua
慢慢沉3 天前
Lua(数组)
开发语言·lua
慢慢沉3 天前
Lua(迭代器)
开发语言·lua
慢慢沉3 天前
Lua基本语法
开发语言·lua
Feng.Lee3 天前
接口测试Postman工具高级使用技巧
功能测试·测试工具·lua·postman·可用性测试
三翼鸟数字化技术团队4 天前
鸿蒙平台运行Lua脚本
lua·harmonyos