[转帖]lua-book-常用库介绍

lua,book,常用,介绍 · 浏览次数 : 0

小编点评

**数学库常用数学函数:** ``` math.rad(x) math.deg(x) math.max(x, ...) math.min(x, ...) math.random math.abs(x) math.fmod(x, y) math.pow(x, y) math.sqrt(x) math.exp(x) math.log(x) math.log10(x) math.floor(x) math.ceil(x) math.pi ``` **示例:** ``` -- 3.1415926535898print(math.pow(2,3)) -- 8print(math.max(-1, 2, 0, 3.6, 9.1)) -- 9.1print(math.floor(3.14159)) -- 3print(math.ceil(7.9988)) -- 8注意:使用 math.random() 函数获得伪随机数时,如果不使用 math.randomseed() 设置伪随机数生成种子或者设置相同的伪随机数生成种子,那么得得到的伪随机数序列是一样的。 ``` **注意:** * 使用 math.random() 函数获得伪随机数时,如果不使用 math.randomseed() 设置伪随机数生成种子或者设置相同的伪随机数生成种子,那么得出的伪随机数序列是一样的。 * 示例中,生成内容时需要带简单的排版。

正文

http://me.52fhy.com/lua-book/chapter7.html

 


String 库

  • .. 链接两个字符串
  • string.upper(argument) 字符串全部转为大写字母。
  • string.lower(argument) 字符串全部转为小写字母。
  • string.len(arg) 计算字符串长度
  • string.reverse(arg) 字符串反转
  • string.format(...) 返回一个类似printf的格式化字符串
  • string.byte(s [, i [, j ]]) 转换字符为整数值(可以指定某个字符,默认第一个字符)
  • string.char(arg) 将整型数字转成字符并连接
  • string.rep(string, n) 返回字符串string的n个拷贝
  • string.gsub(mainString, findString, replaceString, num) 在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换)
  • string.find (str, substr, [init, [end]]) 在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。
  • string.gmatch(str, pattern) 返回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。
  • string.match(str, pattern, init) 寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。 在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。

字符串格式化

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

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

  • %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
  • %d%i - 接受一个数字并将其转化为有符号的整数格式
  • %o - 接受一个数字并将其转化为八进制数格式
  • %u - 接受一个数字并将其转化为无符号整数格式
  • %x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
  • %X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
  • %e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
  • %E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
  • %f - 接受一个数字并将其转化为浮点数格式
  • %g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
  • %q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
  • %s - 接受一个字符串并按照给定的参数格式化该字符串

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

  • 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
  • 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
  • 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
  • 宽度数值
  • 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.

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

Table 库

  • table.concat (table [, sep [, start [, end]]]) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
  • table.insert (table, [pos,] value) 在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.
  • table.maxn (table) 指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)
  • table.remove (table [, pos]) 返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
  • table.sort (table [, comp]) 对给定的table进行升序排序。

日期时间库

  • os.time ([table]) 如果不使用参数 table 调用 time 函数,它会返回当前的时间和日期(它表示从某一时刻到现在的秒数)。如果用 table 参数,它会返回一个数字,表示该 table 中 所描述的日期和时间(它表示从某一时刻到 table 中描述日期和时间的秒数)。
  • os.difftime (t2, t1) 返回 t1 到 t2 的时间差,单位为秒。
  • os.date ([format [, time]]) 把一个表示日期和时间的数值,转换成更高级的表现形式。其第一个参数 format 是一个格式化字符串,描述了要返回的时间形式。第二个参数 time 就是日期和时间的数字表示,缺省时默认为当前的时间。

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

数学库

常用数学函数:

  • math.rad(x) 角度x转换成弧度
  • math.deg(x) 弧度x转换成角度
  • math.max(x, ...) 返回参数中值最大的那个数,参数必须是number型
  • math.min(x, ...) 返回参数中值最小的那个数,参数必须是number型
  • math.random ([m [, n]]) 不传入参数时,返回 一个在区间[0,1)内均匀分布的伪随机实数;只使用一个整数参数m时,返回一个在区间[1, m]内均匀分布的伪随机整数;使用两个整数参数时,返回一个在区间[m, n]内均匀分布的伪随机整数
  • math.randomseed (x) 为伪随机数生成器设置一个种子x,相同的种子将会生成相同的数字序列
  • math.abs(x) 返回x的绝对值
  • math.fmod(x, y) 返回 x对y取余数
  • math.pow(x, y) 返回x的y次方
  • math.sqrt(x) 返回x的算术平方根
  • math.exp(x) 返回自然数e的x次方
  • math.log(x) 返回x的自然对数
  • math.log10(x) 返回以10为底,x的对数
  • math.floor(x) 返回最大且不大于x的整数
  • math.ceil(x) 返回最小且不小于x的整数
  • math.pi 圆周率
  • math.sin(x) 求弧度x的正弦值
  • math.cos(x) 求弧度x的余弦值
  • math.tan(x) 求弧度x的正切值
  • math.asin(x) 求x的反正弦值
  • math.acos(x) 求x的反余弦值
  • math.atan(x) 求x的反正切值

示例:

-- 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

与[转帖]lua-book-常用库介绍相似的内容:

[转帖]lua-book-常用库介绍

http://me.52fhy.com/lua-book/chapter7.html String 库 .. 链接两个字符串 string.upper(argument) 字符串全部转为大写字母。 string.lower(argument) 字符串全部转为小写字母。 string.len(arg)

[转帖]lua-book-模块

http://me.52fhy.com/lua-book/chapter6.html 模块 从Lua5.1开始,Lua添加了对模块和包的支持。 Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个table,然后把需要导出的常量、函数放入其中,最后返回这个

[转帖]lua-book

http://me.52fhy.com/lua-book/chapter2.html 数据类型 [TOC] @date: 2018-3-18 Lua中有8个基本类型分别为:nil、boolean、number、string、table、function、userdata、thread。 函数 typ

[转帖]lua-book-运算符

http://me.52fhy.com/lua-book/chapter3.html Lua支持下列主要的运算符: 算术运算符 关系运算符 逻辑运算符 赋值运算符 还支持..、#特殊运算符。其中赋值运算符仅支持=,不支持C语言的+=、++等运算符。 算术运算符 + 加法 - 减法或者负号 * 乘法

[转帖]lua-book-控制语句

http://me.52fhy.com/lua-book/chapter4.html Lua 语言提供的控制结构有 if-else,while,repeat,for,并提供 break、return 关键字来满足更丰富的需求。不支持switch、continue。 Lua 提供的控制语句部分特征类似

[转帖]lua-book-函数

http://me.52fhy.com/lua-book/chapter5.html 在 Lua 中,函数 也是一种数据类型,函数可以存储在变量中,可以通过参数传递给其他函数,还可以作为其他函数的返回值。 函数定义 函数定义格式: function function_name (arc) -- ar

[转帖]lua-book-文件操作

http://me.52fhy.com/lua-book/chapter8.html Lua I/O 库用于读取和处理文件。分为简单模式、完全模式。 简单模式(simple model) 拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。 完全模式(complete model

[转帖]lua-book-元表

http://me.52fhy.com/lua-book/chapter9.html 在Lua5.1语言中,元表 (metatable) 的表现行为类似于 C++ 语言中的操作符重载,类似PHP的魔术方法。Python里也有元类(metaclass)一说。 通过元表,Lua有了更多的扩展特性。Lua

[转帖]Ngx_lua

http://me.52fhy.com/lua-book/chapter12.html 简介 ngx_lua 指的是 lua-nginx-module模块:通过将 LuaJIT 的虚拟机嵌入到 Nginx 的 worker 中,这样既保持高性能,又能不失去lua开发的简单特性。 OpenResty 

[转帖]Redis里使用Lua

http://me.52fhy.com/lua-book/chapter11.html 版本:自2.6.0起可用。 时间复杂度:取决于执行的脚本。 使用Lua脚本的好处: 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延。 原子操作。redis会将整个脚本作为一个整体执行,中间不会被