跳转到内容

模板:变量/doc

本页使用了标题或全文手工转换
维基百科,自由的百科全书

概要

[编辑]

本模板允许跨模板传递数值

参数及使用方法

[编辑]

{{變數|命令|指示參數|附加参数1|附加参数2|参数1|参数2|参数3....}}

简易用法

[编辑]
宣告变量
语法:{{變數|new|變數名1 = 變數值1 |變數名2 = 變數值2|...}}
  • 用于宣告新的变量并给定初始值。
修改变量
语法:{{變數|set|變數名1 = 變數值1 |變數名2 = 變數值2|...}}
  • 修改指定变量的值,若变量未宣告则会自动宣告。
读取变量
语法:{{變數|get|變數名}}
  • 读取指定变量的值。若变量未宣告则会回报错误。
调用变量
语法:{{變數|call|變數名|参数1|参数2|参数3....}}
  • 若指定变量的值是一个模板名称、{{虚拟模板}}或lua函数名称,则将之调用并回传调用结果。若变量未宣告则会回报错误。
删除变量
语法:{{變數|delete|變數名1 |變數名2 |...}}
  • 删除一个变量。若变量被标记已删除则再重新宣告或赋值前尝试读取未宣告则会回报错误。
查阅变量值更动历史
语法:{{變數|hist|變數名|輸出格式,符號「$」會自動替換為變數值|分隔符號}}
  • 列出指定变量的更动历史,可通过附加参数更改输出格式。若变量未宣告则会回报错误。

命令

[编辑]

命令(命令)确定返回值的类型。一次调用只能包含单个命令。

回传类型 命令 返回 基本用法 描述
取值
变量值 get 最后一个匹配 {{變數|get|變數名}} 从本页中指定位置读出定义于其前方的变量(含由其他模板中通过{{變數|set}}输出的变量)。
getconst 首个匹配[a] {{變數|getconst|變數名}}
hist 所有匹配 {{變數|hist|變數名|附加参数1|附加参数2}}
赋值
隐藏的Strip Marker set (设置变量值) {{變數|set
|變數名1 = 變數值1
|變數名2 = 變數值2 |...}}
定义变量并封入Strip Marker中,这些Strip marker必须输出到页面中(如{{#if}}有可能导致内容未被输出)才能够被其他{{變數|get}}读取,若担心内容影响其他解析器函数,可通过{{變數|hide}}将内容封入其他扩展Strip Marker中。
new (移除变量并设置新变量值) {{變數|new
|變數名1 = 變數值1
|變數名2 = 變數值2 |...}}
delete (移除变量) {{變數|delete|變數名1 |變數名2 |...}}
地址
变量地址 ref 最后一个匹配 {{變數|ref|變數名}} 获得变量所在的Strip Marker之编号,以及存储位置。其输出结果为<Strip Marker編號>:<儲存位置>,如57:1
变量值或名称 refget (变量值) {{變數|refget|變數位址}} 输入<Strip Marker編號>:<儲存位置>(如57:1)获得对应地址的变量值。
refgetname (变量名称) {{變數|refgetname|變數位址}}
工具
wikitext call 最后一个匹配 {{變數|call|變數名|参数1|参数2|参数3....}} 获得变量的值当成模板并调用之,效果会接近{{<變數名對應的值>|参数1|参数2|参数3....}}
callconst 首个匹配[a] {{變數|callconst|變數名|参数1|参数2|参数3....}}
void hide 封入扩展标签 {{變數|hide|<要封存隱藏的內容>}} 将内容隐藏,并通过封存入Strip Marker中令其他{{變數|get}}能调用。[b]
提示框 subst 显示展开原码 {{變數|subst|<要替換引用的內容>}} 本模板不支持替换引用,因此提供一个显示模板输出原码的方式以实现替换引用。其效果与{{softsubst}}类似,但参数传递方法不同。
  1. ^ 1.0 1.1 将变量视为常量,因此仅使用首次{{變數|set}}或末个{{變數|new}}的数值。
  2. ^ 通过<references/>可以读到其前方的所有的<ref></ref>特性将内容封存至<ref></ref>中,并运行<references/>的解析,通过不输出文字来达到隐藏的作用。

参数

[编辑]

下表按固定顺序显示了可用的位置参数(参数*)。对于每个命令,都会标记适用的参数集。例如,如果已给出命令 get,那么至少应给出 要操作的變數名稱 这个参数。

(必要) (必要) (可选) (可选) (可选) (可选)
{{變數 命令 要操作的變數名稱 参数选项 工具作用内容 变量操作1或模板参数1 变量操作2或模板参数2... }}
get, getconst,
ref,refget,refgetname,
call,callconst,hist
hist
hide,subst
set,new,delete,call,callconst
set,new,delete,call,callconst (可选 2nd, 3rd 等)

示例

[编辑]
  • {{虚拟模板}}的传递与使用(仅在单次页面渲染有效)
    照顺序摆放代码将有以下效果:
    1. {{變數|set|臨時模板1=虛擬模板{{!}}code=順利地執行了{{參數|1}}的臨時模板{{參數|2}}。}} $VAR_DEF 臨時模板1=虛擬模板|code=順利地執行了{{{1}}}的臨時模板{{{2}}}。 ;
    2. {{變數|call|臨時模板1| 1號 | 引用 }}→“顺利地执行了1号的临时模板引用。”
  • 循环运算
    照顺序摆放代码将有以下效果:
    1. {{變數|set|fact=1}} $VAR_DEF fact=1 ;
    2. {{變數|get|fact}}→“1”
    3. {{for loop |start=1|stop=7
      |pc1v = <nowiki>{{變數|set|fact={{#expr:{{{1}}}*{{變數|get|fact}} }} }}</nowiki>
      ||call=虛擬模板|pv=1|pc1n=code|pc2n=delnowiki|pc2v=yes}} $VAR_DEF fact=1 ; $VAR_DEF fact=2 ; $VAR_DEF fact=6 ; $VAR_DEF fact=24 ; $VAR_DEF fact=120 ; $VAR_DEF fact=720 ; $VAR_DEF fact=5040 ;
      • 以上代码相当于for(var i=1; i<=7; ++i) fact = i * fact;
    4. {{變數|get|fact}}→“5040”
  • 变量宣告与读取(仅在单次页面渲染有效)
    照顺序摆放代码将有以下效果:
    1. {{變數|set|x=3}} $VAR_DEF x=3 ;
    2. {{變數|get|x}}→“3”
    3. {{變數|set|y=5}} $VAR_DEF y=5 ;
    4. {{變數|get|y}}→“5”
    5. {{#expr: {{變數|get|x}} ^ {{變數|get|y}} }}→“243”

技术细节

[编辑]
  • 本模板共使用以下几种特性实现:
    1. 扩展标签内容解析完毕后会封存于mw:Strip marker中,不受其他模板或解析器影响。
    2. 扩展标签可以读到定义于前方的扩展标签内容。
      举例来说<references/>可以读到其前方的所有的<ref></ref>
    3. <nowiki></nowiki>扩展标签的mw:Strip marker封存,在非替换引用阶段能够通过mw.text.unstripNoWiki()获得内容。
  • 综上,本功能有以下技术限制:
    • 根据(3),此功能在替换引用阶段失效
    • 根据(1),受限于WP:模板限制“Unstrip 传递扩展大小”的5,000,000字节,因此可能不适合做递归调用或大型循环(如循环500次、递归50层)。

参见

[编辑]