模板: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}}
Lua錯誤:內部錯誤:解釋器因收到信號「24」而終止。 結果:1
示例3
當需要使用模板的接收參數時,請直接調用模塊:Loop。
{{#invoke:loop|loop|time=1|5 |do=<nowiki> {{#expr:{{#var:time}} + {{{1|0}}} }}{{{split|、}}} </nowiki> }}
Lua錯誤:內部錯誤:解釋器因收到信號「24」而終止。
若以上代碼位於某模板中,則:
{{模板名称}}
的結果為: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>
Lua錯誤:內部錯誤:解釋器因收到信號「24」而終止。 結果:0
示例3
當需要使用模板的接收參數時,請直接調用模塊:Loop。
{{#invoke:loop|loop|time=1|5 |do=<nowiki> {{#expr:{{#var:time}} + {{{1|0}}} }}{{{split|、}}} </nowiki> }}
Lua錯誤:內部錯誤:解釋器因收到信號「24」而終止。
若以上代碼位於某模板中,則:
{{模板名称}}
的結果為: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> }}