06 Lua 库函数

简介: Lua 体积小、启动速度快,一个完整的 Lua 解释器不过200k,在所有脚本引擎中,Lua 的速度可以说是最快的。所以 Lua 是作为嵌入式脚本的最佳选择。
我是陈皮,一个在互联网 Coding 的 ITer,个人微信公众号「陈皮的JavaLib」关注第一时间阅读最新技术文章。

1 库函数

函数库,可以理解为存放一系列函数的仓库,函数库中的函数称为库函数。调用库函数的格式为:

函数库名.库函数名(参数)

1.1 string.sub()

截取字符串,包括开始下标和终止下标的字符。

string.sub(字符串, 开始下标, 终止下标)

string.sub("chenpi", 1, 4)   -- chen
string.sub("chenpi", 1, 10)  -- chenpi
string.sub("chenpi", 9, 10)  -- 输出空字符串,不报错

1.2 tonumber()

将数字字符串按照指定的进制转为10进制的数值类型。

tonumber("12", 16)         -- 18,16进制的12转为10进制即为18
tonumber("12", 10)         -- 12,10进制的12转为10进制即为12
tonumber("12", 8)          -- 10, 8进制的12转为10进制即为10
tonumber("101", 2)         --  5,2进制的101转为10进制即为5

1.3 select()

指定从第几个返回值开始取值,这个函数可以接收任意数目的参数,第一个参数指定函数的行为,第一个参数为 # 则计算后面参数的个数;第一个参数为数字时,代表从剩余的参数的的第几个参数开始返回。

print(select("#", "a", "b", "c", "d"))  -- 4
print(select(1, "a", "b", "c", "d"))    -- a       b       c       d
print(select(2, "a", "b", "c", "d"))    -- b       c       d

1.4 os.time()

此函数返回当前系统的时间戳(单位为秒)。

print(os.time()) -- 1650294811

1.5 print(...)

打印输出函数,可以接收任意数目的参数。

print("aa", "bb", "cc")
print("oo", true, 123)
print(nil)
print("ok")

-- 输出结果如下
aa      bb      cc
oo      true    123
nil
ok

1.6 tostring(参数)

将参数转换为字符串格式。

print(type(tostring("aa")))  -- string
print(type(tostring(true)))  -- string
print(type(tostring(nil)))   -- string
print(type(tostring(10)))    -- string
print(type(tostring({})))    -- string

1.7 type(参数)

返回参数的类型。

print(type("chenpi")) -- 输出 string
print(type(123))      -- 输出 number
print(type(true))     -- 输出 boolean
print(type(type))     -- 输出 function
print(type({}))       -- 输出 table
print(nil)            -- 输出 nil

1.8 rawset()

-- 更新表中指定键的值,并返回表的指针
rawset(表, 键, 值)

t = {1, 2, 3, 4}
tt = rawset(t, 3, 0)

for k,v in pairs(t) do
    print(k..":"..v)
end

print("---------")

for k,v in pairs(tt) do
    print(k..":"..v)
end

-- 输出结果如下
1:1
2:2
3:0
4:4
---------
1:1
2:2
3:0
4:4

1.9 rawget()

-- 获取表中指定键的值,当键不存在时返回nil,并且键只能是数字
rawget(表, 键)

t = {1, 2, 3, 4}
print(rawget(t, 2))  -- 2

1.10 dofile()

-- 打开并执行一个lua脚本文件
dofile(lua脚本文件名)

dofile("ch.lua")

1.11next()

-- 返回下一个键和下一个键对应的值。注意是下一个键,而且只能是数字键
next(表, 键)

t = {1, 2, 3, 4}
print(next(t, 2))  -- 3 3
print(next(t, 4))  -- nil

1.12 pairs(表) 和 ipairs(表)

-- pairs可以遍历集合的元素

t = {1, 2, 3, 4}
for k,v in pairs(t) do
    print(k..":"..v)
end
-- 输出结果如下
1:1
2:2
3:3
4:4


t = {1, 2, name=3, age=nil, 4}
for k,v in pairs(t) do
    print(k..":"..v)
end
-- 输出结果如下,注意键非数字的输出在键为数字的后面
1:1
2:2
3:4
name:3
-- ipairs也可以遍历集合,但是它不会输出键非数字的

t = {1, 2, name=3, age=nil, 4}
for k,v in ipairs(t) do
    print(k..":"..v)
end
-- 输出结果如下,注意键非数字的输出在键为数字的后面
1:1
2:2
3:4

1.13 require(文件名)

搜索目录并加载文件,并判断文件是否已加载,能避免重复加载同一文件。文件名的后缀 .lua 可以省略,并且在使用此函数前会用 package.path(路径) 来指定搜索的目录。

1.14 table.concat()

返回表中从开始下标到终止下标的所有值,并且使用分隔符隔开,后3个参数时可选的。

table.concat(表, 分隔符, 开始下标, 终止下标)

t = {"a", "b", "c", "d", "e"}
print(table.concat(t, "-", 2, 4))  -- b-c-d
print(table.concat(t, "-"))        -- a-b-c-d-e
print(table.concat(t))             -- abcde

1.15 table.foreach(表, function(I,v))

遍历整个集合,然后将表中每一个元素的键和值传给函数。

t = {"a", "b", name = "c", "d", age = 18}

table.foreach(t, print)

-- 输出结果如下
1       a
2       b
3       d
name    c
age     18


-- foreachi 函数则只会遍历键为数字的元素
table.foreachi(t, print)
-- 输出结果如下
1       a
2       b
3       d

1.16 table.getn(表)

-- 返回表中的元素个数,只计算键为数字的元素
t = {"a", "b", name = "c", "d", age = 18}
print(table.getn(t))  -- 3
print(#t)             -- 3

1.17 数学函数库

-- 取绝对值
math.abs(-20)  --20

-- 不小于参数的最小整数
math.ceil(5.8)  -- 6

-- 不大于参数的最大整数
math.floor(5.8)  -- 5

-- 取模
math.fmod(17, 3)  -- 2

-- 以10为底的对数
math.log10(1000)   -- 3

-- 以自然数为底的对数
math.log(5.43)   -- 1.6919391339458

-- 求最大值和最小值
math.max(1, 5, 10, 6)  -- 10
math.min(1, 5, 10, 6)  -- 1

-- 划分为整数和小数
math.modf(21.15)  -- 21  0.15

-- 求次方
math.pow(2, 3)  -- 8

-- 获得随机数
math.random(100)     -- 一个随机数,执行多次值都是一样的
math.random(1, 100)  -- 获取1-100之中的一个随机数,执行多次值都是一样的

-- 设置随机数种子,再使用random函数,randomseed 和 random 一般一起使用
math.randomseed(os.time())
print(math.random(100))

-- 还有其他很多函数,使用时再查文档即可

本次分享到此结束啦~~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,您的支持就是我创作最大的动力!

相关文章
|
7月前
|
存储 C语言 图形学
C 函数中如何保存 Lua 的数据(1)
C 函数中如何保存 Lua 的数据(1)
99 0
|
存储 Java C语言
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
110 0
|
2月前
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
Lua的面向对象编程、协同线程与协同函数的概念和使用,以及Lua文件I/O操作的基本方法。
39 4
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
|
2月前
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
95 1
|
7月前
|
数据采集 网络安全 UED
揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接
本文探讨了如何使用Lua的lua-resty-request库和爬虫代理IP技术从豆瓣网站高效获取图片链接。通过定制请求头部和代理服务,可以应对反爬虫机制,提高爬虫的稳定性和匿名性。示例代码展示了一种方法,但实际应用需考虑版权和法律法规。
105 2
揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接
|
7月前
|
数据采集 存储 数据安全/隐私保护
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
本文介绍如何使用Lua和lua-http库抓取LinkedIn信息,强调了Lua在爬虫开发中的应用。通过配置亿牛云爬虫代理解决IP封锁问题,实现步骤包括安装库、配置代理、发送HTTP请求、解析响应及提取信息。提供的Lua代码示例展示了下载和存储LinkedIn信息的过程。实验成功展示了Lua爬虫的可行性,但也指出需考虑反爬虫策略以应对实际挑战。
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
|
7月前
|
C语言 C++ 索引
C 函数中如何保存 Lua 的数据(2)
C 函数中如何保存 Lua 的数据(2)
88 1
|
JSON Linux 数据格式
移植lua5.2和luasocket库到嵌入式linux,使能强大的lua脚本和网络功能
移植lua5.2和luasocket库到嵌入式linux,使能强大的lua脚本和网络功能
|
Java
Lua常用库,垃圾回收
Lua常用库,垃圾回收
51 0