当前位置:嗨网首页>书籍在线阅读

07-标准库

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.2.2 标准库

Lua的标准库中提供了很多实用的函数,比如前面介绍的迭代器 ipairspairs ,类型转换函数 tonumbertostring ,还有 unpack 函数都属于标准库中的“Base”库。

Redis支持大部分Lua标准库,如表6-5所示。

表6-5 Redis支持的Lua标准库

| 库  名 | 说  明 | | :----- | :----- | :----- | :----- | | Base | 提供了一些基础函数 | | String | 提供了用于字符串操作的函数 | | Table | 提供了用于表操作的函数 | | Math | 提供了数学计算函数 | | Debug | 提供了用于调试的函数 |

下面会简单介绍几个常用的标准库函数,要了解全部函数请查看Lua手册5。

5 http://www.lua.org/manual/5.1/manual.html#5

1.String库

String 库的函数可以通过字符串类型的变量以面向对象的形式访问,如 string.len (string_var) 可以写成 string_var:len()

(1)获取字符串长度。

string.len(_string_)

string.len() 的作用和操作符 # 类似,例如:

> print(string.len('hello'))
5
> print(#'hello')
5

(2)转换大小写。

string.lower(_string_)
string.upper(_string_)

例如:

> print(string.lower('HELLO'))
hello
> print(string.upper('hello'))
HELLO

(3)获取子字符串。

string.sub(_string_, _start_[,_end_])

string.sub() 可以获取一个字符串从索引 start 开始到 end 结束的子字符串,索引从1开始。索引可以是负数,−1代表最后一个元素。 end 参数如果省略则默认是−1(即截取到字符串末尾)。

例如:

> print(string.sub('hello', 1))
hello
> print(string.sub('hello', 2))
ello
> print(string.sub('hello', 2, -2))
ell
> print(string.sub('hello', -2))
lo

2.Table库

Table库中的大部分函数都需要表的形式是数组形式。

(1)将数组转换为字符串。

table.concat(_table_[,_sep_[,_i_[,_j_]]])

table.concat() 与JavaScript中的 join() 类似,可以将一个数组转换成字符串,中间以 sep 参数指定的字符串分割,默认为空。 ij 用来限制要转换的表元素的索引范围,默认分别是1和表的长度,不支持负索引。例如:

> print(table.concat({1, 2, 3}))
123
> print(table.concat({1, 2, 3}, ',', 2))
2,3
> print(table.concat({1, 2, 3}, ',', 2, 2))
2

(2)向数组中插入元素。

table.insert(_table_, [_pos_,]_value_)

向指定索引位置``pos``插入元素``value``,并将后面的元素顺序后移。默认pos的值是数组长度加1,即在数组尾部插入。如:

> a = {1, 2, 4}
> table.insert(a, 3, 3)
> table.insert(a, 5)
> print(table.concat(a, ', '))
1, 2, 3, 4, 5

(3)从数组中弹出一个元素。

table.remove(_table_[,_pos_])

从指定的索引删除一个元素,并将后面的元素前移,返回删除的元素值。默认 pos 的值是数组的长度,即从数组尾部弹出一个元素。如:

> table.remove(a)
> table.remove(a, 1)
> print(table.concat(a, ', '))
2, 3, 4

3.Math库

Math库提供了常用的数学运算函数,如果参数是字符串会自动尝试转换成数字。具体的函数列表见表6-6。

表6-6 Math库的常用函数

| 函 数 定 义 | 说  明 | | :----- | :----- | :----- | :----- | | math.abs(x) | 获得数字的绝对值 | | math.sin(x) | 求三角函数sin值 | | math.cos(x) | 求三角函数cos值 | | math.tan(x) | 求三角函数tan值 | | math.ceil(x) | 进一取整,如1.2取整后是2 | | math.floor(x) | 向下取整,如1.8取整后是1 | | math.max(x, ...) | 获得参数中最大的值 | | math.min(x, ...) | 获得参数中最小的值 | | math.pow(x, y) | 获得xy的值 | | math.sqrt(x) | 获得x的平方根 |

除此之外,Math库还提供了随机数函数:

math.random([_m_, [,_n_]])
math.randomseed(_x_)

math.random() 函数用来生成一个随机数,根据参数不同其返回值范围也不同:

没有提供参数:返回范围在 [0, 1) 的实数;

只提供了 m 参数:返回范围在 [1, m] 的整数;

同时提供了 mn 参数:返回范围在 [m, n] 的整数。

math.random 函数生成的随机数是依据种子(seed)计算得来的伪随机数,意味着使用同一种子生成的随机数序列是相同的。可以使用 math.randomseed() 函数设置种子的值,例如:

> math.randomseed(1)
> print(math.random(1, 100))
1
> print(math.random(1, 100))
14
> print(math.random(1, 100))
76
> math.randomseed(1)
> print(math.random(1, 100))
1
> print(math.random(1, 100))
14
> print(math.random(1, 100))
76