FANDOM


此擴充功能在Fandom並未預設啟用,但可聯絡Fandom申請使用。

循环(Loops)扩展功能将利用分析函数以达到重复执行之功能。

用法

#while

{{#while}} 可以执行循环功能(反复地执行一个语法)直至条件上得出空白。

{{
  #while:
  | <執行循環的條件>
  | <循環執行的語法>
}}
例子

注意: 以下例子将使用上VariablesExtension

利用wikitext的写法为:

{{ #vardefine: i | 0 }}{{
  #while:
  | {{ #ifexpr: {{ #var: i }} < 5 | true }}
  |<nowiki/>
* {{ #var: i }}{{ #vardefine: i | {{ #expr: {{ #var: i }} + 1 }} }}
}}

将得出以下结果:

  • 0
  • 1
  • 2
  • 3
  • 4

{{#while}} 也可以被用于 模版 上以模拟 Array 。以下为假设 "Template:Loops Test" 的内容:

{{
    #vardefine: i | 0
  }}{{
    #while:
    | {{{ arg{{#var: i }} |}}}
    |<nowiki/>
  * {{{ arg{{#var: i }} }}}{{
      #vardefine: i
      | {{ #expr: {{ #var: i }} + 1 }}
    }}
  }}

利用wikitext的写法为:

{{Loops Test
  |arg0=zero
  |arg1=one
  |arg2=two
  |arg3=three
  |arg4=four
  }}

将得出以下结果:

  • zero
  • one
  • two
  • three
  • four

请注意"空白"的定义将包括任何 新行列(newlines, ie: br, p) 缩排(tab)或 空格(space)。如果出现非预期的空白(如:语法的开头或结尾),可以利用非空白的字符(包括HTML &#32;)以防止非预期的空白(上面的例子则用上<nowiki/>)


#dowhile

{{#dowhile}}的运作方式与{{#while}}极其相似,但差别在于条件式是在运行循环内容后才被检查,因此运行时无论条件式有无成立皆会运行一次。

#loop

{{
  #loop: <變數名稱>
  | <起始值> 
  | <執行次數> 
  | <語法句子> 
}}
{{#loop}} 重复地分析及显示相当于<执行次数>的<语法句子>。 <起始值>则放于<变数名称>内(由变数扩展功能(VariablesExtension) 所读写{{#var:}})。如执行次数为正数,每执行一次语法,<变数名称>内的数值皆会加一; 如执行次数为负数,每执行一次语法,<变数名称>内的数值皆会减一。

注意: 以所有的循环功能以言,#loop由于没有执行要求的关系,应当为最佳及简易使用。

例子
{{#loop: varname
  | 4
  | 4
  | <nowiki/>
* 這是第 {{#var:varname}} 次執行,還有 {{#expr: 7- {{#var:varname}}}} 次需要執行。
}}

将得出以下结果:

  • 这是第 4 次执行,还有 3 次需要执行。
  • 这是第 5 次执行,还有 2 次需要执行。
  • 这是第 6 次执行,还有 1 次需要执行。
  • 这是第 7 次执行,还有 0 次需要执行。

#forargs (试验性中)

{{#forargs}} 最常用于模版中。它可以制造出类似模版中的参数并利用变数扩展功能(VariablesExtension)中的{{#var:}} 读取及写入以回传于页面上。

{{
  #forargs: <前綴>
  | <key>
  | <value>
  | <語法句子>
}}

此函数遍历名称以其开头的每个参数<prefix>。每次重复上次计算步骤时, 它都会将参数名称减去<prefix> <key>, 就像调用 {{#vardefine: <key>}} 一样。然后, 它获取参数的值, 并将其放入<value>类似的方法中。然后展开块语句。块语句可能包含 {{{#var: <key>}} 和 {{{#var: <value>}} 以访问存储的参数 </value></key></value></key></key></prefix></prefix>

例子

以下为假设 "Template:Loops Test" 的内容:

{{
    #forargs: arg
    | key
    | value
    | <nowiki/>
  * {{#var: key}} = {{#var: value}}
  }}

利用维基文本的写法为:

{{Loops Test
  | arg1=val1
  | spam=spammity
  | arg5=val5
  | argument=value
  }}

将得出以下结果:

  • 1 = val1
  • 5 = val5
  • ument = value

#fornumargs (试验中)

{{
  #fornumargs: <key>
  | <value>
  | <block statement>
}}
{{#fornumargs}} 功能类似于 {{#forargs}}这两个有主要区别在于:一个它不采用前缀参数,另外一个它只适用于带编号的参数, 无论它们是显式编号:
{{Template | 1=one | 2=two }}

或隐式编号:

{{Template | one | two }}

在单个模板调用中混合这些方法可能会导致值被覆盖, 所以要小心。

例子:

如果 "Template:Loops Test" 里面添加:

{{
  #fornumargs: number
  | value
  | <nowiki/>
* {{#var: number}} = {{#var: value}}
}}

然后

{{Loops Test
  | Apricot
  | B = Bolognese
  | Caramel slice
  | 5 = Eclair
}}

将会形成:

  • 1 = Apricot
  • 2 = Caramel slice
  • 5 = Eclair


另参见

帮助及反馈


原文:Extension:Loops(英文)

除了特别提示,社区内容遵循CC-BY-SA 授权许可。