Template:Sandbox/サンムル/While/doc
跳转到导航
跳转到搜索
简介
该模板可以循环执行语句。相较于解析器函数,因为使用Lua模块进行循环,所以没有100次上限的限制。
用法
{{while | dofirst = 是否先执行一次循环 | condition=<nowiki>检测循环能否继续的代码...</nowiki> |do= <nowiki>
循环执行的代码...
</nowiki>}}
其中,dofirst可以填写的值有:
true:dowhile模式,先执行一次循环,再检测循环能否继续。- 其他值:
while模式,先检测循环能否继续,再执行循环。
默认为while模式,若希望启动dowhile模式,请给dofirst参数赋值。
注意:
- 第一层{{while}}的检测代码
condition及执行代码do需要用<nowiki/>标签包裹 - 多层循环中内层循环的代码不需要
<nowiki/>标签包裹
由于使用{{while}}调用时,上下文会被更改为{{while}},因此被<nowiki>标签包裹的代码将无法正常接收模板的接收参数(也即被三对大括号包裹的参数,如{{{1}}})
如果需要使用传入的模板接收参数,可以改为直接调用模块:Loop,具体方法为:
while模式时,将{{while|...}}替换为{{#invoke:loop|while|...}}。dowhile模式时,将{{while|dofirst=true|...}}替换为{{#invoke:loop|dowhile|...}}。
示例
示例1
{{#vardefine:count|0}}<!--
-->{{#vardefine:time|1}}<!--
-->{{while|condition=<nowiki>{{#ifexpr: {{#var:time}} <= 101 | true }}</nowiki>|do=
<nowiki>{{#vardefine:count| {{#expr: {{#var:count}} + {{#var:time}} }} }}{{#vardefine:time| {{#expr: {{#var:time}} + 1 }} }}</nowiki> }}
结果:{{#var:count}}
结果:5151
示例2
== 简介 ==
该模板可以循环执行语句。相较于解析器函数,因为使用Lua模块进行循环,所以'''没有100次上限的限制'''。
== 用法 ==
<pre>
{{while | dofirst = 是否先执行一次循环 | condition=<nowiki>检测循环能否继续的代码...</nowiki> |do= <nowiki>
循环执行的代码...
</nowiki>}}
其中,dofirst可以填写的值有:
true:dowhile模式,先执行一次循环,再检测循环能否继续。- 其他值:
while模式,先检测循环能否继续,再执行循环。
默认为while模式,若希望启动dowhile模式,请给dofirst参数赋值。
注意:
- 第一层{{while}}的检测代码
condition及执行代码do需要用<nowiki/>标签包裹 - 多层循环中内层循环的代码不需要
<nowiki/>标签包裹
由于使用{{while}}调用时,上下文会被更改为{{while}},因此被<nowiki>标签包裹的代码将无法正常接收模板的接收参数(也即被三对大括号包裹的参数,如{{{1}}})
如果需要使用传入的模板接收参数,可以改为直接调用模块:Loop,具体方法为:
while模式时,将{{while|...}}替换为{{#invoke:loop|while|...}}。dowhile模式时,将{{while|dofirst=true|...}}替换为{{#invoke:loop|dowhile|...}}。
示例
示例1
{{#vardefine:count|0}}<!--
-->{{#vardefine:time|1}}<!--
-->{{while|condition=<nowiki>{{#ifexpr: {{#var:time}} <= 101 | true }}</nowiki>|do=
<nowiki>{{#vardefine:count| {{#expr: {{#var:count}} + {{#var:time}} }} }}{{#vardefine:time| {{#expr: {{#var:time}} + 1 }} }}</nowiki> }}
结果:{{#var:count}}
结果:5151
示例2
{{#vardefine:count|0}}<!--
-->{{#vardefine:time1|1}}{{while|condition=<nowiki>{{#ifexpr: {{#var:time1}} <= 5 | true }}</nowiki>|do=<nowiki>
{{#vardefine:time2|1}}{{while|condition={{#ifexpr: {{#var:time2}} <= 10 | true }}|do=
{{#vardefine:count| {{#expr: {{#var:count}} + {{#var:time1}} * {{#var:time2}} }} }}
{{#vardefine:time2| {{#expr: {{#var:time2}} + 1 }} }}
}}
{{#vardefine:time1| {{#expr: {{#var:time1}} + 1 }} }}</nowiki>
}}
结果:{{#var:count}}
脚本运行超时。 结果:1
示例3
当需要使用模板的接收参数时,请直接调用模块:Loop。
{{#invoke:loop|loop|time=1|5
|do=<nowiki>
{{#expr:{{#var:time}} + {{{1|0}}} }}{{{split|、}}}
</nowiki>
}}
脚本运行超时。
若以上代码位于某模板中,则:
{{模板名称}}的结果为:1、2、3、4、5、{{模板名称|2}}的结果为:3、4、5、6、7、{{模板名称|2|split=@}}的结果为:3@4@5@6@7@
与解析器函数的替换
本模板的参数与#loop略有不同,你可以通过一下方法快速替换:
- 将
#loop:替换为subst:loop/auto|。 - 点击“保存更改”。
例子
替换过程中进行的更改以粗体标注。
- 若有使用
#loop的代码如下:- {{#loop:i|5|10|{{#var:i}}<br />}}
- 将
#loop:替换为loop/auto|:- {{subst:loop/auto|i|5|10|{{#var:i}}<br />}}
- 点击保存,原内容被替换为
{{#invoke:loop|loop|i=5|14|do=<nowiki>{{#var:i}}<br /></nowiki> }}
</includeonly>
脚本运行超时。 结果:0
示例3
当需要使用模板的接收参数时,请直接调用模块:Loop。
{{#invoke:loop|loop|time=1|5
|do=<nowiki>
{{#expr:{{#var:time}} + {{{1|0}}} }}{{{split|、}}}
</nowiki>
}}
脚本运行超时。
若以上代码位于某模板中,则:
{{模板名称}}的结果为:1、2、3、4、5、{{模板名称|2}}的结果为:3、4、5、6、7、{{模板名称|2|split=@}}的结果为:3@4@5@6@7@
与解析器函数的替换
本模板的参数与#loop略有不同,你可以通过一下方法快速替换:
- 将
#loop:替换为subst:loop/auto|。 - 点击“保存更改”。
例子
替换过程中进行的更改以粗体标注。
- 若有使用
#loop的代码如下:- {{#loop:i|5|10|{{#var:i}}<br />}}
- 将
#loop:替换为loop/auto|:- {{subst:loop/auto|i|5|10|{{#var:i}}<br />}}
- 点击保存,原内容被替换为
{{#invoke:loop|loop|i=5|14|do=<nowiki>{{#var:i}}<br /></nowiki> }}