社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103

全站通知:

帮助:解析函数/switch

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

多分支语句,类似于编程语言中的switch。

其第一个参数是要进行条件判断的表达式或值。后续的参数是一系列的条件和对应的结果。

出自扩展 ParserFunctions

格式
{{#switch: 表达式|case1 = 结果1|case2 = 结果2|case3 = 结果3|...|caseN = 结果N|默认}}
{{#switch: 表达式|case1 = 结果1|case2 = 结果2|case3 = 结果3|...|caseN = 结果N|#default = 默认}}
例子
{{#switch: baz|foo = Foo|baz = Baz|Bar}}
Baz
{{#switch: foo|foo = Foo|baz = Baz|Bar}}
Foo
{{#switch: zzz|foo = Foo|baz = Baz|Bar}}
Bar
#switch和部分转换标签可以作用于配置文件,从而可以使不熟悉模板代码的编辑者编辑可配置元素。
关于默认结果
在当没有'情况字串'与'比较字串'相符时,会返回'默认结果':
{{#switch: test|foo = Foo|baz = Baz|Bar}}
Bar
按这个函数的句法,'默认结果'必须是最后一个参数,并且不能包含原始等号符。
{{#switch: test|Bar|foo=Foo|baz=Baz}}
{{#switch: test|foo=Foo|baz=Baz|B=ar}}
或者'默认结果'可以用'情况字串'#default来特别声明。
用这种方式声明的'默认结果'可以放在函数内的任何位置:
{{#switch: test|foo=Foo|#default=Bar|baz=Baz}}
Bar
如果'默认结果'被省略,当没有相符情况时,不会返回结果:
{{#switch: test|foo=Foo|baz=Baz}}
一组情况的结果
可以使用“fallthrough”值,即若干'情况字串'返回相同的'返回结果'。这能减少重复。
{{#switch: 比较字串
 |情况字串1 = 返回结果1
 |情况字串2
 |情况字串3
 |情况字串4 = 返回结果234
 |情况字串5 = 返回结果5
 |情况字串6
 |情况字串7 = 返回结果67
 |#default = 默认结果
}}
在这里情况2、3、4都会返回“返回结果234”,情况6、7都会返回“返回结果67”。
关于比较
#ifeq相同,如果'比较字串'和'情况字串'都为数值,则会按照数值进行比较。以上情况外,区分大小写:
{{#switch: 0 + 1|1 = one|2 = two|three}}
three
{{#switch:
{{#expr: 0 + 1}}
|1 = one|2 = two|three}}
one
{{#switch: a|a = A|b = B|C}}
A
{{#switch: A|a = A|b = B|C}}
C
'情况字串'可以是空:
{{#switch:|= Nothing|foo = Foo|Something}}
Nothing
当出现一个相符情况后,之后的'情况字串'会被忽略:
{{#switch: b|f = Foo|b = Bar|b = Baz|}}
Bar
注意
#switch#ifeq的数值比较方法与#ifexpr比较不同:
{{#switch: 12345678901234567|12345678901234568 = A|B}}
B
{{#ifexpr: 12345678901234567 = 12345678901234568|A|B}}
A
具体见ifeq处的第一条“注意”。
关于原始等号符
'情况字串'不能包含原始等号符。为了解决这个问题,创建了一个只包含一个等号符=的模板
{{=}}
应用的例子:
{{#switch: 1=2
 |1=2 = raw
 |1
<nowiki>=</nowiki>
2 = nowiki
 |1
{{=}}
2 = template
 |1&#61;2 = html
 |default
}}

template

关于替换#ifeq
#switch可以用来减少扩展深度。
比如:
{{#switch:
{{{1}}}
|情况1=分支1|情况2=分支2|情况3=分支3|分支4}}
等价于:
{{#ifeq:
{{{1}}}
|情况1|分支1|
{{#ifeq:
{{{1}}}
|情况2|分支2|
{{#ifeq:
{{{1}}}
|情况3|分支3|分支4}}
}}
}}
写成便于阅读的格式即为:
{{#ifeq:
{{{1}}}
|情况1
 |
<!--then-->
分支1
 |
<!--else-->
{{#ifeq:
{{{1}}}
|情况2
 |
<!--then-->
分支2
 |
<!--else-->
{{#ifeq:
{{{1}}}
|情况3
 |
<!--then-->
分支3
 |
<!--else-->
分支4
}}

}}

}}


实际用例
一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考