Lua 常见的函数库
标准库
详细信息参考 https://www.lua.org/manual/5.1/
Lua 的库,本质上是包含函数的表,表类似于命名空间
- base : 最核心的函数,可以直接使用
- type()
- print()
- pairs
- ipairs
- assert(s) 断言
- error(msg)
collectgarbage(opt)
Lua 垃圾回收函数
collectgarbage("count")
检查内存使用情况
collectgarbage("collect")
强制运行内存垃圾回收
f = loadstring(str)
加载 Lua 代码段,调用 f()
pcall(protected call)
保护函数,以 true/false
返回调用结果
true
成功,同时返回调用结果:local ok, v = pcall(math.sqrt, 2)
false
失败,同时返回错误:local ok, err = pcall(require, "xxx")
xpcall
支持错误处理函数
- package : 管理模块
- require 加载 Lua 模块的函数
- package.path
- package.cpath
- package.loaded 本质是一个表,保存了已加载的模块,通过
package.loaded
和 loadstring(str)
实现热加载代码
package.loaded.num = loadstring("return 3.14")
- string : 字符串操作
- string.upper(s) / string.lower(s)
- string.sub(s, from, to) 提取字符串
- string.format(format, …)
- table : 表操作相关函数
table.insert(arr, pos, value)
- 追加的推荐方式
arr[#arr + 1] = "x"
- table.remove(arr, pos)
- table.sort(arr, comp) comp 是比较符,如
>
- table.concat(arr, sep) 使用分隔符连接数组
- jit 库的扩展
- 新建:
local table_new = require "table.new"; local t = table_new(narray, nhash)
- 清空:
table.clear(t)
table.clone(t)
- math : 数据计算
- math.floor(x) / math.ceil(x)
- math.randomseed(x)
- math.max(x, …) / math.min(x, …)
- io : 文件操作,是阻塞的
- io.open(filename, mode)
- io.popen(prog, mode)
f = io.popen("ps -ef | grep openresty")
f:read()
f:close()
- os : 操作系统的函数
- os.execute(cmd)
- os.execute(“mkdir " .. name)
- os.remove(filename) / os.remove(filename, newname)
- os.date(format, time)
- debug
- jit
jit.version
jit.os
jit.version_num
jit.arch
jit.status()
包管理工具
LuaRocks 是Lua编程语言的程序包管理器,它提供了分发Lua模块的标准格式,易于管理rock安装的工具以及用于分发它们的服务器
国内代理
- luarocks.cn 是国内加速网站,使用
--server https://luarocks.cn
指定国内源,示例
$ luarocks install apisix --server https://luarocks.cn
$ luarocks install kong --server https://luarocks.cn
示例
pairs vs ipairs
local print_table = function (t)
for key, value in pairs(t) do
print(key .. " " .. value)
end
end
local t1 = {1, 2, 3, 4, "hi"}
print_table(t1)
-- 1 1
-- 2 2
-- 3 3
-- 4 4
-- 5 hi
local t2 = {}
for i=1,10 do
table.insert(t2, 1, i)
end
print_table(t2)
-- 1 10
-- ...
-- 10 1
-- print(table.maxn(t2)) Lua 5.1