帮助/解析器函数
前言[编辑 | 编辑源代码]
本页面简单介绍几个解析器函数语句的功能以及使用方法,其内容基本摘自mediawiki[1]。解析器函数通常要基于模板功能,因此建议在阅读本页之前先了解相关内容。
编者水平有限,以下内容仅可作粗略参考,有意者请阅览Mediawiki链接中的介绍。
这玩意有什么用?[编辑 | 编辑源代码]
解析器函数用于分析所输入的代码,并根据情况输出不同的结果。虽然解析器函数的功能繁多,但是本页面介绍的几个函数基本上可以理解为某种条件运算符。
以已经弃用的模板:装备属性/鱼雷为例:
{| class="wikitable sortable" |- !图鉴<br>编号!!class="unsortable"|立绘!!class="unsortable"|名称!!鱼雷!!命中!!对潜!!class="unsortable"|备注!!开发时间 |- {{装备属性/鱼雷|图鉴编号=87|名称=三联533毫米鱼雷|稀有度=1|鱼雷=+3|开发=00:05:00|备注=[[沃克兰]]、[[柯尼斯堡]]级自带}} {{装备属性/鱼雷|图鉴编号=225|名称=72厘米三连装鱼雷|稀有度=6|鱼雷=+15|开发=|备注=战利品商店兑换获得}} |}
图鉴 编号 |
立绘 | 名称 | 鱼雷 | 命中 | 对潜 | 备注 | 开发时间 |
---|---|---|---|---|---|---|---|
87 | 三联533毫米鱼雷 | 鱼雷+3 | 沃克兰、柯尼斯堡级自带 | 00:05:00 | |||
225 | 72厘米三连装鱼雷 | 鱼雷+15 | 战利品商店兑换获得 | 不可开发 |
可以看出,在调用这个模板时,需要输入鱼雷的一些信息和数据(鱼雷的名称、鱼雷值、图鉴编号等)才能完成这个列表。然而,装备名称的星级颜色并没有直接在输入的代码中出现;当开发时间为空时,对应的方框并不为空,而是写着“不可开发”。这就体现了解析器函数的作用:根据|稀有度所填入的数值自动转换“名称”文字的颜色,因此六星的鱼雷显示彩色名字,而一星的鱼雷显示黑色名字;当|开发=后面为空时,开发时间一项会自动填入“不可开发”。这种效果对应的解析器函数字符都会在下文提到。
#if【非空/空】[编辑 | 编辑源代码]
函数#if用于检测一段内容是否为空。如果不为空则输出结果一,为空则输出结果二。格式如下:
{{#if:检测内容|不为空输出的结果|为空时输出的结果}}
解析器函数都有类似的格式:用双大括号{{括起,接着写上井号#和函数对应的字符,后接半角冒号:,然后写入解析对象。函数有的函数在对象之后可以用竖线|分隔开来,竖线右侧部分用于自定义解析对象后输出的内容。
下面列出一些#if的使用效果:
{{#if:|不为空|为空}}
→为空{{#if:381|不为空|为空}}
→不为空{{#if:||{{黑幕|这里什么都没有}}}}
→这里什么都没有{{#if:0v0||{{黑幕|这里什么都没有}}}}
→
#expr与#ifexpr【表达式】【表达式是否成立】
函数#expr用于逻辑运算,验证表达式是否成立;或者根据数学规则得出表达式的结果。大部分情况下#expr可以视作用于数学运算,输入正确的公式就能得出结果。
{{#expr:数学/逻辑表达式}}
下面的代码使用#expr解析了一个小学算术表达式:
{{#expr:233*801/(1206-1405}}
expr会得出它的运算结果为:-937.85427135678
如果表达式本身不成立或对象为空(tan90°属于无效),则#expr会输入数字“0”,如果成立则输出数字“1”。
{{#expr:}}
→{{#expr:tan90}}
→-1.9952004122082{{#expr:1/0}}
→除以零。{{#expr:asin2}}
→asin的参数无效:< -1或> 1。{{#expr:ln(e)=1}}
→1{{#expr:381>460}}
→0{{#expr:VV=381}}
→表达式错误:无法识别词语“vv”。
↑#expr只能识别数学内容及符号。
另一个字符#ifexpr同样用于验证表达式是否成立,但是可以指定输出的结果。具体规则如下:
{{#ifexpr:表达式|成立/不为空时输出的结果|成立/不为空时输出的结果}}
这里使用了与上面一样的表达式,但是输出的结果不同。代码和效果如下:
{{#ifexpr:|结果不为空|结果为空}}
→结果为空{{#ifexpr:tan90|结果不为空|结果为空}}
→结果不为空{{#ifexpr:1/0|1|0}}
→除以零。{{#ifexpr:asin2|1|0}}
→asin的参数无效:< -1或> 1。{{#expr:ln(e)=1|正确|错误}}
→1{{#ifexpr:381>460|381比较大|460比较大}}
→460比较大{{#ifexpr:VV=381|VV是381|VV不是381}}
→表达式错误:无法识别词语“vv”。
↑可见#ifexpr同样只能识别数学内容及符号。
以下代码摘自模板:技能的部分内容,用于解释#expr与#ifexpr的运用。
{{#vardefine:shipname|{{#invoke:舰娘|查找编号|{{{编号}}}}}}} |
这一句定义了动态变量“shipname”,内容为【参照{{{编号}}}去数据库里调用对应编号的舰娘名称】。 |
{{#vardefine:linkname |
这一句准备定义变量“shiplink”,其定义见以下三行: |
|{{#ifexpr:{{{编号}}}>1000 |
条件:如果表达式【{{{编号}}}大于1000】成立,则:(接下行) |
|{{#invoke:舰娘|查找编号|{{#expr:{{{编号}}}-1000}}}} |
【参照{{{编号}}}减去1000后的数字,去数据库里调用对应编号的舰娘名称】。 |
|{{#var:shipname}}}} |
否则(即{{{编号}}}小于1000的情况下),【参照{{{编号}}}去数据库里调用对应编号的舰娘名称】。这种情况下“shipname”与“shiplink”是相同的。 |
注:在舰娘属性数据库中,编号1000以后的舰娘为改造后,编号1对应胡德未改,1001为胡德·改。这种情况下胡德·改的“shipname”还是胡德·改(no.1001),但是“shiplink”会是胡德(no.1)。 | |
<span id="{{#var:shipname}}">[[File:Ship girl {{{编号}}}.png|链接={{#var:linkname}}|80px]] |
这一部分对应下方表格中的“舰娘”一列(有Q版图的那一列)。以胡德·改为例,随着编辑者在技能模板中输入编号1001,上方的定义域会将胡德·改的“shipname”变量定义为胡德·改,“shiplink”变量定义为胡德。最终结果为,把鼠标放在舰娘这一格上会显示文字“胡德·改”,而点击Q版图片时的链接为胡德页面。 |
<br>[[{{#var:linkname}}|'''{{#var:shipname}}''']]</span> |
原理同上,令Q版图片下方的文字写着胡德·改,链向胡德页面。 |
下方表格所使用的技能模板代码只有如下一小段:
{{技能|编号=1001|类型=BUFF|备注=|类型2=BUFF|备注2=皇家{{黑幕|赛艇}}飙车}} {{技能|编号=331|类型=被动|备注=}}
技能列表 | |||||||
---|---|---|---|---|---|---|---|
编号 | 舰娘 | 名称 | 改造 | 技能类型 | 技能效果 Lv1/Lv2/Lv3 | 注释 | |
No.1001 | 胡德·改 |
75 | 皇家海军的荣耀 | BUFF | 自身作为旗舰时,为队伍中所有舰船附加5%/7.5%/10%的被暴击率,为队伍中的E国舰船附加10%/15%/20%的暴击率,为其他国家的舰船附加5%/7.5%/10%的暴击率。 | ||
皇家巡游 | BUFF | 自身作为旗舰时,提升全队航速2/3/4点。 | 皇家赛艇飙车 | ||||
No.331 | 无比 |
完美战巡 | 被动 | 自身被暴击率增加25%/20%/15%,攻击战列,战巡、航战时,造成110%/115%/120%的伤害,攻击航速小于自己的目标时,暴击率增加5%/10%/15%。 |
#ifexist【目标是否存在】[编辑 | 编辑源代码]
#ifexist用于检测本百科中的指定页面或者文件是否存在,并根据其存否而输出两种结果。
{{#ifexist:[[页面或文件]]|存在时输出的结果|不存在时输出的结果}}
下面举两个实际使用的栗子:
<div style="text-align:right"> 大和今天回家了吗?{{#ifexist:[[大和]]|她来啦!无糖灭世波!|没有ಥ_ಥ}} </div>
如果页面大和存在(就是说左边的链接不为红色),在“大和今天回家了吗?”之后会跟随
第二个栗子:
你游{{#ifexist:文件:L BROKEN 666.png|怎么还没丸?|药丸!}}
这段代码会检测图片文件文件:L BROKEN 666.png。根据本站的文件上传准则,这个名称的图片必须是编号为666的舰船的大破立绘。如果不存在此图片会输出结果“你游药丸!”,如果存在这怎么可能?则会输出“你游怎么还没丸?”
代码的具体效果如下:
你游药丸!
#ifeq【两项是否相等】[编辑 | 编辑源代码]
#ifeq用于比对两串字符,并且根据字符是否相等而输出两种结果。
{{#ifeq:内容1|内容2|相等输出结果|不相等输出结果}}
当两项内容皆为有效数值时,#ifeq会从数学上进行对比。
{{#ifeq:1|01|相等|不相等}}
→相等{{#ifeq:1|10|相等|不相等}}
→不相等{{#ifeq:10|2*3+4|相等|不相等}}
→不相等{{#ifeq:0|ln(1)|相等|不相等}}
→不相等{{#ifeq:2^16|65536|相等|不相等}}
→不相等{{#ifeq:VV|381|相等|不相等}}
→不相等
以下内容摘自模板:敌舰,用于展示#ifeq的使用案例。
{{#ifeq: {{{星级|}}} | 1 | {{color|#A5A5A5|{{{战舰名|}}}}} |}}{{#ifeq: {{{星级|}}} | 2 | {{color|#00DB00|{{{战舰名|}}}}} |}}{{#ifeq: {{{星级|}}} | 3 | {{color|#00E3E3|{{{战舰名|}}}}} |}}{{#ifeq: {{{星级|}}} | 4 | {{color|#FF42FF|{{{战舰名|}}}}} |}}{{#ifeq: {{{星级|}}} | 5 | {{color|#FACC2E|{{{战舰名|}}}}} |}}{{#ifeq: {{{星级|}}} | 6 | {{color|#FF6262|{{{战舰名|}}}}}
可见这段代码规定了,当敌舰模板中填入了“星级”这一项信息时,会影响同一模板中填入的“战舰名”文字的颜色。其逻辑如下:
{{#ifeq: {{{星级|}}} | 1 | {{color|#A5A5A5|{{{战舰名|}}}}} |}}
如果输入的“星级”为1,则调用文字颜色模板将“战舰名”的颜色改为#A5A5A5。否则不输出内容,接下段:
{{#ifeq: {{{星级|}}} | 2 | {{color|#00DB00|{{{战舰名|}}}}} |}}
如果星级为2则使用颜色#00DB00,否则不输出内容,接下段↓
{{#ifeq: {{{星级|}}} | 3 | {{color|#00E3E3|{{{战舰名|}}}}} |}}
如果星级为2则使用颜色#00E3E3,否则不输出内容,接下段↓
{{#ifeq: {{{星级|}}} | 4 | {{color|#FF42FF|{{{战舰名|}}}}} |}}
如果星级为2则使用颜色#FF42FF,否则不输出内容,接下段↓
{{#ifeq: {{{星级|}}} | 5 | {{color|#FACC2E|{{{战舰名|}}}}} |}}
如果星级为2则使用颜色#FACC2E,否则不输出内容,接下段↓
{{#ifeq: {{{星级|}}} | 6 | {{color|#FF6262|{{{战舰名|}}}}} |}}
如果星级为2则使用颜色#FF6262,否则不输出内容。
如果“星级”的范围不仅限于1~6,那么上方的代码可以继续拓展,直到穷尽“星级”可对应的所有数值。
#switch【映射变换】[编辑 | 编辑源代码]
- switch用于解析一串字符,并根据预设的字符-结果对应表来输出对应的结果。其代码形式如下:
{{#switch:输入的内容 |内容1 = 结果1 |内容2 = 结果2 |内容3 = 结果3 |内容4 |内容5 |内容6 = 结果6 ... |内容n = 结果n |默认结果 }}
如果“输入的内容”等于“内容1”,则函数输出“结果1”;“输入的内容”等于“内容2”则输出“结果2”,以此类推。当某一项内容没有对应的结果(后面没有等于号“=”)时,会自动映射下方第一个结果,即“内容4”、“内容5”和“内容6”都会输出“结果6”。如果“输入的内容”不属于预设的【内容x=结果x】映射表中的任何一项,则输出“默认结果”。
以下代码摘自模板:装备图鉴表上,用于展示#switch的使用方法。
{{ #switch: {{{星级1|}}} | 1 = {{color|black|<big>'''{{{名称1|}}}'''</big>}} | 2 = {{color|green|<big>'''{{{名称1|}}}'''</big>}} | 3 = {{color|blue|<big>'''{{{名称1|}}}'''</big>}} | 4 = {{color|purple|<big>'''{{{名称1|}}}'''</big>}} | 5 = {{color|orange|<big>'''{{{名称1|}}}'''</big>}} | 6 = {{color|rainbow|<big>'''{{{名称1|}}}'''</big>}} }}
这段代码的逻辑与上面引用自敌舰模板的代码是一样的:当“星级”等于1时,调用color模板使输出的“名称1”变为黑色;“星级”为2则对应绿色字,以此类推。实际上#switch也可以用于替换#ifeq。