跳转到内容

模板:变数

本页使用了标题或全文手工转换
被永久保护的模板
维基百科,自由的百科全书
文档图示 模板文档[查看] [编辑] [历史] [清除缓存]

概要

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

参数及使用方法

{{變數|命令|指示參數|附加参数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号的临时模板引用。”
  • 回圈运算

    此处因技术限制无法展示,请至模板说明页#回圈运算阅读。

    • 说明:由于本示例需要动态调用Template:变数(透过{{虚拟模板}}),而此页的标题同为Template:变数,因此会被系统视为模板循环。然而此模板在其他页面使用则不会有此问题。
  • 变数宣告与读取(仅在单次页面渲染有效)
    照顺序摆放程式码将有以下效果:
    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层)。

参见