舰R百科是靠无数自愿编辑者持续地建设更新完善的。编辑非常简单,请勇于更新页面!
编辑入门 | 资助百科 | 留言讨论页 | 微博@舰R百科 | 百科编辑讨论Q群:366818861

帮助/解析器函数

来自舰R百科
跳转到导航 跳转到搜索

前言[编辑 | 编辑源代码]

本页面简单介绍几个解析器函数语句的功能以及使用方法,其内容基本摘自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>

如果页面大和存在(就是说左边的链接不为红色),在“大和今天回家了吗?”之后会跟随很丢人的文字(wtmsb);如果页面不存在则会跟随“没有ಥ_ಥ”。上方代码的具体效果见右侧:

大和今天回家了吗?没有ಥ_ಥ

第二个栗子:

你游{{#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【映射变换】[编辑 | 编辑源代码]

  1. 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。

拓展阅读[编辑 | 编辑源代码]

动态变量

维基框架下的Lua语言应用