跳至內容

模板:變數/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層)。

參見

[編輯]