找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1564|回复: 1

[教程源码] [Lua插件开发]05. Lua自带函数命令语法与例子

[复制链接]
  • 打卡等级:武林至尊

1087

主题

2143

回帖

4337

积分

院长

鲜花
9
猫粮
7517
QQ
发表于 2022-2-27 17:27:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本系列教程目的是让大家掌握Lua基本语法与按键精灵手机版的插件开发制作,丰富按键精灵生态环境,让按键精灵变得更加强大!
本教程中部分知识点参考《Lua程序设计》书籍,有兴趣可以自行购买→传送门
按键精灵手机版插件的开发标准草案请阅读帖子:https://zimaoxy.com/b/t-3297-1-1.html
紫猫学院也有提供Lua插件开发的VIP教学服务,有兴趣请咨询紫猫老师QQ345911220或微信zimaoxy

Lua自带函数命令
在前面课程我们已经对Lua语法做了详细讲解,这里介绍下Lua中的自带函数命令,类似于按键精灵中的Chr()、Instr()等自带命令。
篇幅有限,这里仅举几个典型函数命令例子,更多命令请翻阅Lua 5.3 参考手册,需注意,这是Lua5.3版的文档,而按键精灵是基于Lua5.2版,故有个别命令可能无法使用,具体请自行测试。


print
大家请在上面参考手册的链接中找到基础命令下的print命令。
print (···)
接收任意数量的参数,并将它们的值打印到 stdout。 它用 tostring 函数将每个参数都转换为字符串。 print 不用于做格式化输出。仅作为看一下某个值的快捷方式。 多用于调试。 完整的对输出的控制,请使用 string.format 以及 io.write。

以上是文档里的命令介绍,我们对此展开讲解。
第一句print (···)是这个命令的语法与参数介绍,由于他是基础命令,所以没有在某个库下,直接写print()即可调用这个命令。括号里的3个点(...)代表任意数量的参数。
接下来是这个命令的使用说明。
接收任意数量的参数,并将它们的值打印到 stdout。这句话表名这个命令功能是打印输出功能,类似于按键精灵的TracePrint。
它用 tostring 函数将每个参数都转换为字符串。表示它会把所有传入的参数都经过tostring()转换成字符串进行打印输出。
后面的介绍作为一个补充说明,告知它没有格式化功能,更加强大的需要自己完善。下面我们写几个简单例子:
[Lua] 纯文本查看 复制代码
a = 1
print(a) -- 打印输出变量a的值,等同于按键精灵的TracePrint a
b = 2
print(a, b) -- 打印输出两个变量值,等同于按键精灵的TracePrint a, b



string.find
大家请在上面参考手册的链接中找到字符串命令下的string.find命令。
string.find (s, pattern [, init [, plain]])
查找第一个字符串 s 中匹配到的 pattern (参见 §6.4.1)。 如果找到一个匹配,find 会返回 s 中关于它起始及终点位置的索引; 否则,返回 nil。 第三个可选数字参数 init 指明从哪里开始搜索; 默认值为 1 ,同时可以是负值。 第四个可选参数 plain 为 true 时, 关闭模式匹配机制。 此时函数仅做直接的 “查找子串”的操作, 而 pattern 中没有字符被看作魔法字符。 注意,如果给定了 plain ,就必须写上 init 。

如果在模式中定义了捕获,捕获到的若干值也会在两个索引之后返回。

以上是文档里的命令介绍,我们对此展开讲解。
第一句string.find (s, pattern [, init [, plain]])是该命令的语法和参数介绍,string是字符串库,find是这个库下的一个命令,类似于我们在定义了一个table数据,然后把一个函数丢进去。括号里的s, pattern [, init [, plain]]是参数内容,第1个参数是s,第2个参数是pattern,第3和第4个分别是initplain,参数中的中括号[]代表可选参数,也就是initplain这两个参数可以被省略。但是请注意,这是文档中的描述语法,并非表示你实际代码也要写中括号!
第二句开始属于对该命令的详细介绍。
查找第一个字符串 s 中匹配到的 pattern 。这句告知我们命令功能是查找字符串内容,第1个参数s是待查找原字符串,第2个参数pattern是用于查找的字符串内容。例如想要在abcdef这个字符串中查找字母c,那么abcdef就是第1个参数s,c就是第2个参数pattern。
如果找到一个匹配,find 会返回 s 中关于它起始及终点位置的索引; 否则,返回 nil。这句告知我们查找成功返回两个数据,分别是找到字符串的开始位置和结束位置,如果没找到那么就返回nil。
第三个可选数字参数 init 指明从哪里开始搜索; 默认值为 1 ,同时可以是负值。这句告知参数3属于可选参数,代表从第几个位置开始查找字符串,省略不写情况下默认为1,负值未告知作用,但是可以由正值是左往右第几位推断出负值应该就是右往左第几位,具体到时候写段代码测试即可得知。
第四个可选参数 plain 为 true 时, 关闭模式匹配机制。 此时函数仅做直接的 “查找子串”的操作, 而 pattern 中没有字符被看作魔法字符。 注意,如果给定了 plain ,就必须写上 init 。这句告知参数4也是可选参数,它的作用是开启或关闭模式匹配,一般情况下,布尔型的参数默认值都是false。
经过上面的分析,我们对string.find()命令已经有所了解。下面我们写几个简单例子:
[Lua] 纯文本查看 复制代码
s = "zimaoxy.com"
i, j = string.find(s, "mao")  --在字符串变量s中查找mao
print(i, j) -- 输出3, 5, 因为找到mao在原字符串中是从第3个位置开始到第5个位置结束

i = string.find(s, "mao", 5)  --在字符串变量s中从第5个位置开始查找mao
print(i) -- 输出nil, 因为从第5个位置开始已经找不到mao这3个字母了

i = string.find(s, ".")  --在字符串变量s中查找模式匹配符号.
print(i) -- 输出1, 因为在模式匹配中的.符号表示任意字符

i = string.find(s, ".", 1, true)  --在字符串变量s中查找原符号.
print(i) -- 输出8, 因为填写了参数4关闭模式匹配, 所以只查找原符号.



总结
以上仅对这两个命令文档做一些解读,大家可以跟着这样的思路,去尝试更多命令的理解,使用类似于https://chenxuuu.gitee.io/lua-online/这种在线调试lua代码的平台进行运行测试。
楼主热帖
  • 打卡等级:无名新人

1

主题

7

回帖

9

积分

按键电脑班学员

鲜花
0
猫粮
321
发表于 2022-2-28 10:16:38 | 显示全部楼层
♪(^∇^*)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫猫编程学园

GMT+8, 2024-12-22 17:55

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表