存在的意义
变量的构建方便简化执行过程,特别是执行SQL语句的时候,但是仅仅用到这上面不能充分体现它的优点,实际上在制作卡片消息的时候就非常有作用了,可以方便用户交互,
可以输入卡片 $我的名片
直接生成自己的名片卡
可以输入卡片 $他的名片(694886526,default,default,default)
直接生成对应的qq的卡片.
这里有3个694886526
但是经过后面的改良增加了{arg传递的参数下标,默认值}
也就是{arg0|arg,默认值}
语法,因此可以让用户更便捷,也让自己更省心的维护代码。
可空变量的灵感来源于生成个人名片的的默认标题修改,默认标题其实够用了,但是如果给他个性化但是就涉及到一个问题,有的用户不知道该填写啥。所以就像到了一个规则定义,并解析.
select标记占位
语法
select(默认值)
select标记的逻辑是优先让%s
的参数用完,用完之后呢 比如 变量x(1,2,3,4,5)其中 1 2 3 是用来替换里面3个%s
的,那么select(
标记找到了之后则从4
开始替换,如果有2个,那么刚好替换为4和5,如果 ,不足够了,那么显示的是select(
与)
之间的默认值
可空变量比参数变量更加牛逼了,因为允许为空,允许默认值占位。
举例:
配置添加变量测试可空变量|变量1=%s 变量2=%s 可空变量1的内容是=select(你好) 可空变量2的内容是=select(我好) 可空变量2的内容是=select(大家好) 可空变量2的内容是=select(你非常棒)
这里面其中select
为默认值,如果这个参数长度不够或者长度达到了但是为空或者为null
或者为default
则依然用原来的,否则用传递的。
使用效果如下:
配置print $测试可空变量(我爱你,老婆,default,我不好,default,那天晚上我很开心)
打印的结果:
变量1=我爱你 变量2=老婆 可空变量1的内容是=你好 可空变量2的内容是=我不好 可空变量2的内容是=大家好 可空变量2的内容是=那天晚上我很开心
配置print $测试可空变量(我爱你,老婆,default,哈哈哈)
打印结果:
变量1=我爱你 变量2=老婆 可空变量1的内容是=你好 可空变量2的内容是=哈哈 可空变量2的内容是=大家好 可空变量2的内容是=你非常棒
可空变量的体验需要1.8.4版本的机器人才能体验。
1.8.4版本也会伴随q++插件的更新,
这次主要是优化了进程通讯相关的东西,也就是不用之前的通讯方式了,现在的方式可以双端通讯回调,更便捷,查询大量数据的时候最方便,或者是一下子查询很多昵称,比如输入参数 floor
的时候之前的版本只能显示QQ因为没办法查询,因为不是异步回调,发过去消息那边没法回调回来,为了实现这个不修改qq实现回调,我特么发现除了把机器人直接让qq加载外还有一种方式也可以实现。快哉,这简直为下一步构建更牛逼的机器人奠定了基础啊。
可重复位置变量
1、这个功能只要是借用c#
语言的优点,他的优点就是可以避免重复写值,随意控制读取哪个参数,不需要区分先后顺序。
2、如果读取的变量不存在则读取空字符串,或者arg值后面的数值 也就是默认值,这比之前的可空参数更加牛逼了更加灵活了。
首先输入配置添加变量 多参指位变量|变量1=%s 变量2={arg0} 变量3={arg0} 变量4={arg0} 变量5={arg0} 读取参数3={arg2} 读取参数2={arg1} 读取参数5={arg4}
转换的结果
变量1=别重复我哦我是参数1 变量2=别重复我哦我是参数1 变量3=别重复我哦我是参数1 变量4=别重复我哦我是参数1 变量5=别重复我哦我是参数1 读取参数3=参数3 读取参数2=参数2 读取参数5=我是参数5
可重复位置又可定义默认值变量
首先添加变量
配置添加变量 多参指位可默认值变量|变量1=%s 变量2={arg3,arg3的默认值} 变量3={arg0,arg0的默认值} 变量4={arg0} 变量5={arg0} 读取参数3={arg2} 读取参数2={arg1} 读取参数5={arg4,arg4的默认值}
验证
执行后输入配置print $多参指位可默认值变量()
变量1= 变量2=arg3的默认值 变量3=arg0的默认值 变量4= 变量5= 读取参数3= 读取参数2= 读取参数5=arg4的默认值
输入配置print $多参指位可默认值变量(发,发发发,default,default,我是参数5)
得出的结果:
变量1=发 变量2=arg3的默认值 变量3=发 变量4=发 变量5=发 读取参数3= 读取参数2=发发发 读取参数5=我是参数5
注意点
{arg
不能和select()
共存,因为后者是用来取%s后面依次对应的值,而{arg
也属于这个范围,会导致取错值。比如最后一个参数是select(
前面的参数传递了,解析的是{arg
那么这里读取的就是前面的,这类似与可变参数为什么只能放到最后面一个道理,这里要想解决矛盾除非select
放到前面,另外由于我又进一步升级{arg
变量因此select(
昙花一现,开发到测试不到半小时,结果又一次更新。。select
的优势是不需要记住到底是arg多少了,只需要填写默认值就行了。不过我决定改良select
和{arg
语法同时存在的时候select
永远是读取最后面的.那么select
在{arg}
前面,但是解析传递的参数的时候得先计算%s
总数+{arg
总数,然后从这个位置往后面排。