模板:变量/doc
外观
此页面是Template:变量的模板文档。 此页面可能包含了模板的使用说明、分类和其他内容。 |
此模板使用Lua语言: |
概要
[编辑]本模板允许跨模板传递数值
参数及使用方法
[编辑]{{變數|命令|指示參數|附加参数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
|
定义变量并封入Strip Marker中,这些Strip marker必须输出到页面中(如{{#if}} 有可能导致内容未被输出)才能够被其他{{變數|get}} 读取,若担心内容影响其他解析器函数,可通过{{變數|hide}} 将内容封入其他扩展Strip Marker中。
|
new
|
(移除变量并设置新变量值) | {{變數|new
| ||
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}}类似,但参数传递方法不同。 |
参数
[编辑]下表按固定顺序显示了可用的位置参数(参数*
)。对于每个命令,都会标记适用的参数集。例如,如果已给出命令 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 等)
| ||||||||
示例
[编辑]- {{虚拟模板}}的传递与使用(仅在单次页面渲染有效)
- 照顺序摆放代码将有以下效果:
{{變數|set|臨時模板1=虛擬模板{{!}}code=順利地執行了{{參數|1}}的臨時模板{{參數|2}}。}}
{{變數|call|臨時模板1| 1號 | 引用 }}
→“顺利地执行了1号的临时模板引用。”
- 照顺序摆放代码将有以下效果:
- 循环运算:
- 照顺序摆放代码将有以下效果:
{{變數|set|fact=1}}
{{變數|get|fact}}
→“1”{{for loop |start=1|stop=7
|pc1v = <nowiki>{{變數|set|fact={{#expr:{{{1}}}*{{變數|get|fact}} }} }}</nowiki>
||call=虛擬模板|pv=1|pc1n=code|pc2n=delnowiki|pc2v=yes}}
- 以上代码相当于
for(var i=1; i<=7; ++i) fact = i * fact;
- 以上代码相当于
{{變數|get|fact}}
→“5040”
- 照顺序摆放代码将有以下效果:
- 变量宣告与读取(仅在单次页面渲染有效)
- 照顺序摆放代码将有以下效果:
{{變數|set|x=3}}
{{變數|get|x}}
→“3”{{變數|set|y=5}}
{{變數|get|y}}
→“5”{{#expr: {{變數|get|x}} ^ {{變數|get|y}} }}
→“243”
- 照顺序摆放代码将有以下效果:
技术细节
[编辑]- 本模板共使用以下几种特性实现:
- 扩展标签内容解析完毕后会封存于mw:Strip marker中,不受其他模板或解析器影响。
- 扩展标签可以读到定义于前方的扩展标签内容。
- 举例来说
<references/>
可以读到其前方的所有的<ref></ref>
。
- 举例来说
<nowiki></nowiki>
扩展标签的mw:Strip marker封存,在非替换引用阶段能够通过mw.text.unstripNoWiki()获得内容。
- 综上,本功能有以下技术限制:
参见
[编辑]- {{User DYK}}:同样有跨模板传递数值的功能(通过Module:DYKCount实现),然而其仅能读取记载于{{ProduceEncouragement}}中特定参数的数值。
- 其他类似的数值传递模板如{{bots}}
- Module:If empty:同为通过扩展标签的Strip Marker封存内容的模块。If empty通过扩展标签的Strip Marker封存追踪分类,避免了直接输出原码可能造成
{{#expr:}}
等判断式出错的问题。 - {{虚拟模板}}及辅助系列模板: