在稳定版本3.3.5发放之后,一个【选择】函数被越来越多的人注意到,其带来的并非仅仅是对于【随取】的替代和完善,更多的是一个更加便利的写法和更加清晰的逻辑。
编辑于2020.10.3 转载请注明原作者
“选择”函数是什么
【选择[序号或逻辑组]>=<[返回1]>=<[返回2]……】 从多个结果中按照约定选择指定返回。
当[序号或逻辑组]为数值的时候,选择第[序号或逻辑组]个返回。
当[序号或逻辑组]为逻辑组时,选择第 “首个成立的逻辑表达式序号” 个返回。
引用于变量说明
选择对象为数值时的示例
当选择对象为数值的时候,其会返还后面第[数值]个参数。
1 2 3 4 5 6 7 |
#选择数值例子 【选择1>=<A>=<B>=<C】 返回:A 【选择2>=<A>=<B>=<C】 返回:B 【选择4>=<A>=<B>=<C】 返回:C |
可以看到,在上文的例子中,根据不同的选择数值,对于后文的参数有了不同的反馈。而超出了选择上限之后(即数值为4的情况下)则是选择了最后一个作为输出结果。
回忆一下之前我们所了解过的东西,这个最为类似的函数就是我们曾经在好感度那篇文章中提到的【区间比较】函数,其存在的意义就是按照一个数值条件,选择性的输出后面的参数。
1 2 3 4 |
#区间比较 【区间比较A[1]B[2]C>=<[数值]】 基本等价于 【选择[数值]>=<A>=<B>=<C】 |
因此,我们可以确定的第一个事情就是。
选择可以用来替代区间回复,这意味着无论是时间回复(根据时间进行的回复)还是好感度回复还是什么抽卡的回复,都是可以用选择来替换原有的区间回复的,且效率会更高。
1 2 3 4 5 6 |
#时间回复 【选择【现行时间-时】>=<1点>=<2点>=<3点>=<4点>=<懒得写了,你懂得】 #利用数学公式进行规范化 【选择【计算【变量好感度】\10+1】>=<0-10好感度>=<10-20好感度>=<20以上好感度】 #抽卡概率粗略对应 【选择【计算【随机数1-100】\10+1】>=<N>=<N>=<N>=<N>=<R>=<R>=<R>=<SR>=<SR>=<SSR】 |
- 优点
- 处理速度较快
- 不会出现奇怪的转义bug
- 缺点
- 数值需要进行公式运算进行转换
- 书写并不方便
选择对象为逻辑组时的示例
当选择对象为逻辑组时,会选择首个成立的逻辑组作为输出
为了了解如何使用逻辑组,我们需要首先了解【逻辑】这个函数是如何使用的。
“逻辑”函数是什么
【逻辑[表达式]】 若逻辑正确返回真,否则返回假。
[表达式]代表的是一个逻辑表达式,逻辑表达式的规格包括简单的数值比较,如:10<30,20<=10等,也可以是逻辑关系【逻辑10<20】||【逻辑20>100】,也可以是正则查找或者简单的包含关系。
1 2 3 4 5 6 7 8 9 10 11 |
#逻辑示例 【逻辑10>=10】 #逻辑套逻辑 【逻辑【逻辑10<20】||【逻辑20>199】】 #包含不包含 【逻辑测试in测试文本】 【逻辑测试!in测试文本】 #加入[]来表明字符串 【逻辑[测试]!in[测试文本]】 #正则匹配 【逻辑[23DDD]reg[\d+]】 |
带有逻辑的选择行为
1 2 |
#选择好感度 【选择【逻辑【变量好感度】<100】||【逻辑【变量好感度】<200】||【逻辑【变量好感度】<500】>=<你的好感度低于100>=<你的好感度低于200>=<你的好感度低于500>=<你的好感度高于500】 |
可以看到,在有逻辑组的情况下,铃心的选择函数变得相当灵活——以至于可以完成多种任务,在某些情况下可以比【比较】【判断】这些函数简单方便的多得多(因为选择本身是顺序执行的,其可以等价于一个多层比较或者多层的判断)
至此,我们可以得到最后对于选择函数的评判
- 一个对于铃心代码有着极大精简作用的函数
- 异常灵活,逻辑清晰。
- 配合逻辑组的情况下可以替代大量变量。
- 吹爆,说这玩意仅仅是【随取】替代品的都给x爬。
题外话,【随取】的逻辑其实是非重取出。比如说【随取1>=<2>=<3】,其多次取出的结果必定有如下规律:
1.三个三个为一组,一组内必定包括三个不同的数字。
2.非重信息储存在常量内。
“选择”函数带来的巨大改变
对于原有的系统,通过选择可以极大地简化和改进
开关系统的改变
1 2 3 4 |
#开关函数 【开关>=<【读配置【变量路径】>=<开关>=<【当前群号】>=<1】】 #回复调用 【选择【开关】>=<【返回】>=<】 |
- 优势
- 可以摆脱原有嵌套模式的问题
- 可以任意插入,自行选择何时进行开关截断
- 可以通过增加选择长度,自由切换开关类别
- 可以针对回复设定独自的返回回复
- 稳定的雅痞
重写每日上限
直接把自己的复制上来了,仅供参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#配置文件版 【函数每日上限>=< 【赋值变量路径>=<【运行目录】\app\Config】 【赋值变量现行日期>=<【现行日期-年】年【现行日期】00时00分00秒】 【判断【读配置【变量路径】\每日上限.ini>=<【关键词】>=<【发送者QQ】d>=<】>=<【变量现行日期】>=< 【写配置【变量路径】\每日上限.ini>=<【关键词】>=<【发送者QQ】d>=<【变量现行日期】】 【写配置【变量路径】\每日上限.ini>=<【关键词】>=<【发送者QQ】c>=<1】1 >=< 【赋值变量当日触发次数>=<【计算【读配置【变量路径】\每日上限.ini>=<【关键词】>=<【发送者QQ】c>=<0】+1】】 【比较【变量当日触发次数】>=<[参数1]>=<【返回2】>=<1【写配置【变量路径】\每日上限.ini>=<【关键词】>=<【发送者QQ】c>=<【变量当日触发次数】】】 】】 #数据库版 【函数每天上限>=< 【赋值变量现行日期>=<【现行日期-年】年【现行日期】00时00分00秒】 【赋值变量源数据>=<【取出一行【判空【SQL-读取【常量路径】\储存池\分群上限\总上限管理.db>=<SELECT 时间,次数 FROM 上限表 WHERE QQ=【发送者QQ】 AND 关键词='【关键词】';】>=<【SQL-执行【常量路径】\储存池\分群上限\总上限管理.db>=<INSERT INTO 上限表 VALUES (【发送者QQ】,'【关键词】','【变量现行日期】',0);】】>=<1】】 【赋值变量时间>=<【分割取出【变量源数据】>=<;>=<1】】 【赋值变量次数>=<【分割取出【变量源数据】>=<;>=<2】】 【判断【变量时间】 >=<【变量现行日期】>=< 【SQL-执行【常量路径】\储存池\分群上限\总上限管理.db>=<UPDATE 上限表 SET 时间='【变量现行日期】',次数=1 WHERE QQ=【发送者QQ】 AND 关键词='【关键词】';】2>=<【赋值变量当日触发次数>=<【计算【变量次数】+1】】 【比较【变量当日触发次数】>=<[参数1]>=<【返回1】>=<2【SQL-执行【常量路径】\储存池\分群上限\总上限管理.db>=<UPDATE 上限表 SET 次数=【变量当日触发次数】 WHERE QQ=【发送者QQ】 AND 关键词='【关键词】';】】】】 #调用 【选择【每天上限3】>=<【返回冲过三次了你还想冲?】>=<】 |
- 优势
- 不用忍受默认【一天上限】的优先级问题
- 可以根据回复自定义超出上限后的行为
- 方便
- 自己心里踏实
- 稳定的雅痞
- 数据库版本的比铃心自带的快(大量人群使用的情况下)
后记
本篇中并没有叙述什么实质性的,可以直接拿去用的代码,更多的是在强调选择函数的强大之处。
虽然选择可以替代很多原有的变量,但是我并不是很推荐用选择代替原本的比较、判断和随取,因为在可读性的方面,原有的变量更为清晰些。
上文中我所描述的两个巨大改变是针对于整体代码而言的,而选择自己的用途是多之又多,还请各位读者自行参悟。
最后,愿大风暴中的各位,且行且珍惜。
1 Comment
下期可以更新一下数据库的用法吗?谢谢