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+ 引入),建议根据实际使用的版本参考官方文档。

相关推荐
爱的叹息17 小时前
Spring Boot 集成Redis 的Lua脚本详解
spring boot·redis·lua
x-cmd1 天前
[250331] Paozhu 发布 1.9.0:C++ Web 框架,比肩脚本语言 | DeaDBeeF 播放器发布 1.10.0
android·linux·开发语言·c++·web·音乐播放器·脚本语言
爱学测试的雨果2 天前
Postman —— postman实现参数化
软件测试·功能测试·测试工具·lua·postman
老狼孩111227 天前
全分辨率免ROOT懒人精灵-自动化编程思维-设计思路-实战训练
运维·自动化·lua·脚本开发·懒人精灵·全分辨率免root
数据知道7 天前
【Lua】一文快速掌握 Lua 语言指令(Lua 备忘清单)
开发语言·junit·lua
非衣居士8 天前
Lua程序设计笔记
lua·游戏开发
Winston-Tao10 天前
Skynet 中 snlua 服务启动整体流程分析
lua·游戏开发·c 语言·skynet·游戏服务器框架
发财哥fdy10 天前
3.24-3 接口测试断言
开发语言·lua
ZZDICT10 天前
OpenResty(Lua)+Redis实现动态封禁IP
redis·nginx·lua·openresty