置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

模板:Sandbox/サンムル/While/doc

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
跳至導覽 跳至搜尋

簡介

該模板可以循環執行語句。相較於解析器函數,因為使用Lua模塊進行循環,所以沒有100次上限的限制

用法

{{while | dofirst = 是否先执行一次循环 | condition=<nowiki>检测循环能否继续的代码...</nowiki> |do= <nowiki>
循环执行的代码...
</nowiki>}}

其中,dofirst可以填寫的值有:

  • truedowhile模式,先執行一次循環,再檢測循環能否繼續。
  • 其他值: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可以填寫的值有:

  • truedowhile模式,先執行一次循環,再檢測循環能否繼續。
  • 其他值: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略有不同,你可以通過一下方法快速替換:

  1. #loop:替換為subst:loop/auto|
  2. 點擊「保存更改」。

例子

替換過程中進行的更改以粗體標註。

  1. 若有使用#loop的代碼如下:
    {{#loop:i|5|10|{{#var:i}}<br />}}
  2. #loop:替換為loop/auto|
    {{subst:loop/auto|i|5|10|{{#var:i}}<br />}}
  3. 點擊保存,原內容被替換為
    {{#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略有不同,你可以通過一下方法快速替換:

  1. #loop:替換為subst:loop/auto|
  2. 點擊「保存更改」。

例子

替換過程中進行的更改以粗體標註。

  1. 若有使用#loop的代碼如下:
    {{#loop:i|5|10|{{#var:i}}<br />}}
  2. #loop:替換為loop/auto|
    {{subst:loop/auto|i|5|10|{{#var:i}}<br />}}
  3. 點擊保存,原內容被替換為
    {{#invoke:loop|loop|i=5|14|do=<nowiki>{{#var:i}}<br /></nowiki> }}