模板:變數/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:}}
等判斷式出錯的問題。 - {{虛擬模板}}及輔助系列模板: