解析函数/ifeq
阅读
2022-07-06更新
最新编辑:顾小满real
阅读:
更新日期:2022-07-06
最新编辑:顾小满real
这个函数判断两个输入字符串是否相同,并根据结果输出两个字符串的其中一个。 如果需要更多的比较和输出字符串,请考虑使用#switch
。
{{#ifeq: string 1 | string 2 | value if identical | value if different }}
如果两个字符串均为数字,则函数会进行数值的比较:
{{#ifeq: 01 | 1 | equal | not equal}}
→ equal{{#ifeq: 0 | -0 | equal | not equal}}
→ equal{{#ifeq: 1e3 | 1000 | equal | not equal}}
→ equal{{#ifeq: {{#expr:10^3}} | 1000 | equal | not equal}}
→ equal
否则,函数会进行文本的比较(大小写敏感):
{{#ifeq: foo | bar | equal | not equal}}
→ not equal{{#ifeq: foo | Foo | equal | not equal}}
→ not equal{{#ifeq: "01" | "1" | equal | not equal}}
→ not equal (对比上面没有引号的例子){{#ifeq: 10^3 | 1000 | equal | not equal}}
→ not equal (对比上面带有#expr
的例子,会先回传一个有效的整数)
作为例子,考虑一个已存在的模板Template:Timer
,该模板利用解析器来选择两个标准时间,short和long。 它以参数作为第一个输入来比较字符串“short”–这没有约定顺序,但是如果参数在第一个则更容易理解。 模板代码定义为:
{{#ifeq: {{{1|}}} | short | 20 | 40 }}
会产生如下结果:
{{timer|short}}
→ 20{{timer|20}}
→ 40{{timer}}
→ 40
警告: | 在数值比较结果上,#ifexpr 不总是和解释器#ifeq 与#switch 保持一致。 后面两种比较相对于#ifexpr 而言更加精确,因而未必返回相同结果。
考虑比较下面两个仅有最后一位数不同的数:
因为
对于不同的数字,结果实际上是不正确的。
造成 |
警告: | 任何的解析器标签和其它的解释器函数,用在解析器函数中时,都一定会被一个临时生成的独一无二的标识码替代。这会影响如下比较:
|
警告: | 随网站配置的变化,含有页面名字的魔术字的字符串的字面比较可能会发生错误。 比如说,{{FULLPAGENAME}}这一魔术字随wiki的变化,可能在返回时使开头字母变成大写,也会用下划线替代空格。
为了解决这个问题,将这个魔术字应用到两个参数上:
|