常用库介绍

[TOC]

@date: 2019-3-25 23:03:27


String 库

字符串格式化

string.format()类似c里的printf()。示例:

print(string.format("name %s, age %s", "yjc", 20)) -- name yjc, age 20
print(string.format("%.4f",1/3)) -- 0.3333

格式字符串可能包含以下的转义码:

为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入:

注:string.match()string.gmatch() 目前并不能被 JIT 编译,OpenResty 里应尽量使用 ngx_lua 模块提供的 ngx.re.match 等API。

Table 库

日期时间库

如果使用OpenResty,不建议使用Lua的标准时间函数,因为这些函数通常会引发不止一个昂贵的系统调用,同时无法为 LuaJIT JIT 编译,对性能造成较大影响。推荐使用 ngx_lua 模块提供的带缓存的时间接口,如 ngx.today, ngx.time, ngx.utctime, ngx.localtime, ngx.now, ngx.http_time,以及 ngx.cookie_time 等。

数学库

常用数学函数:

示例:

-- src/test_math.lua
print(math.pi) -- 3.1415926535898
print(math.pow(2,3))  -- 8
print(math.max(-1, 2, 0, 3.6, 9.1))     --  9.1
print(math.floor(3.14159))  -- 3
print(math.ceil(7.9988))    -- 8

注意:使用 math.random() 函数获得伪随机数时,如果不使用 math.randomseed() 设置伪随机数生成种子或者设置相同的伪随机数生成种子,那么得得到的伪随机数序列是一样的。示例:

-- math.randomseed(os.time())  -- 设置随机种子
print(math.random()) -- 0.79420629243124
print(math.random(10)) -- 7
print(math.random(10,20)) -- 16

上面的例子里同一机器运行多次的结果是一样的,只有设置了随机的伪随机数生成种子,才能保证每次生成的随机数是不相同的。

参考

1、OpenResty最佳实践
https://moonbingbing.gitbooks.io/openresty-best-practices/
2、Lua 5.3 参考手册 - 目录
http://www.runoob.com/manual/lua53doc/contents.html
3、Lua 字符串 | 菜鸟教程
http://www.runoob.com/lua/lua-strings.html