Template:虛擬模板/doc

本模板透過解析器函數,可在不建立一個新的模板的情況下,動態生成一個「虛擬的」臨時模板,並傳入參數進去,類似於C++或java的匿名函数Closure或者JavaScript中的立即调用函数表达式

  • 用途:在部分說明文檔示範模板語法,或解協助解析條目中無法順利被解析的模板語法。
  • 用法:由於需要先迴避模板語法在生成一個「虛擬的」臨時模板前就被解析,因此{{{}}}{{}}皆要先由跳脫字元切割成如{\{\{}\}\}{\{}\}的形式。

參數及使用方法

  • {{虛擬模板 | code= 填入模板語法 | ... | ... 傳入模板參數、當正常模板使用 }}

模板資料

以下是该模板的模板数据,适用于可视化编辑器等工具。

虛擬模板模板数据

透過解析器函數,可在不建立一個新的模板的情況下,動態生成一個「虛擬的」臨時模板,並傳入參數進去

模板参数

此模板首选参数不换行的行内格式。

参数描述类型状态
11

傳入"code"參數的的第1個參數

示例值
測試
字符串可选
codecode

模板語法

示例值
{{{1}}}
字符串可选
code語法為nowikidelnowiki

解析code內容中位於nowiki標籤內的部分

布尔可选
code語法為msgnwdelmsgnw

解析code內容中位於msgnw內的部分

布尔可选

範例

  • 一般用法
    • 輸入{{虛擬模板|code=在{{{1}}}中,{{{2}}}是一門{{{3}}}。 | 數學 | 微積分 | 重要的議題 }}
      顯示為「在數學中,微積分是一門重要的議題。」
  • 強制注入參數
    • 輸入{{虛擬模板|code=在{{{1}}}中,{{{2}}}是一門{{{3}}}。|args={{虛擬模板|參數 | \1=物理學 | 數學 | 重要的議題 }} }}
      顯示為「在物理學中,數學是一門重要的議題。」
      ※註:如果{{虛擬模板}}的第一參數已經數入了「參數」來指定模式,那麼如果需要傳入真正的第一參數到模板裡的話,就需要使用跳脫字元的第一參數表示法:|\1=
  • 防止提前解析
    • 方法一,使用跳脫字元
      • 輸入{{虛擬模板|code={\{#tag:math{{!}}\\frac{ {{{1}}} }{ {{{2}}} } }\} | 16 | 25 }}
        顯示為「
    • 方法二,使用<nowiki></nowiki>
      • 輸入{{虛擬模板|delnowiki=yes|code=<nowiki>{{#tag:math|\\frac{ {{{1}}} }{ {{{2}}} } }}</nowiki> | 16 | 25 }}
        顯示為「
  • 測試間接參數傳遞時,特定模板語法的行為
    • 輸入{{虛擬模板|delnowiki=yes|code=<nowiki>{{#invoke:ilh|main}}</nowiki> | lang=維基數據 | lang-code=d | Minecraft世界 | Q26945014 }}
      顯示為「Minecraft世界Q26945014
      • 說明:虛擬模板內的語法為「{{#invoke:ilh|main}}」,當這個內容是一個獨立的模板時,結果為輸入參數「| lang=維基數據 | lang-code=d | Minecraft世界 | Q26945014」的行為。
  • 作為空模板
    • 匿名函數原理類似,同樣可以僅宣告但不提供內容
    • 此時則與{{void}}相同
    • 輸入{{虛擬模板|void}}
      顯示為「」;展開為「
  • 還原跳脫字符
    • 輸入{{虛擬模板|code=\n**:#第甲項\tAA\b\n**:#第乙項\tBB\b}}
      顯示為「
      1. 第甲項 AA�
      2. 第乙項 BB�」
  • {{虛擬模板}}的傳遞與使用(僅在單次頁面渲染有效)
    照順序擺放代碼將有以下效果:
    1. {{變數|set|臨時模板1=虛擬模板{{!}}code=順利地執行了{\{\{1}\}\}的臨時模板{\{\{2}\}\}。}} $VAR_DEF 臨時模板1=虛擬模板|code=順利地執行了{\{\{1}\}\}的臨時模板{\{\{2}\}\}。 ;
    2. {{變數|call|臨時模板1| 1號 | 引用 }}→「順利地執行了1號的臨時模板引用。」
  • 延伸用法(讓模板可以自己產生內容,又能讓外部調用)
    1. 模板內:{{虛擬模板|code={\{#invoke:Fullurl|fullurl}\}|args=<noinclude>{{虛擬模板|參數|\1=Template:虛擬模板}}</noinclude>{{#invoke:參數|虛擬模板擴展參數}}}}
      模板顯示:Template:虛擬模板
    2. 調用{{模板名|Module:TemplateParameters2}}
      顯示:Module:TemplateParameters2

技術限制

由於MediaWiki禁止模板迭代調用,因此在虛擬模板的code中使用其他虛擬模板可能會出現問題,例如

  • 輸入{{虛擬模板|code=一次,{{虛擬模板{{!}}code=二次}} }}
    顯示為「一次,检测到模板循环:Template:虛擬模板

但若避免遞迴地傳入參數則沒有問題,如:

  • 輸入{{虛擬模板|code=一次,{{虛擬模板|code=二次}} }}
    顯示為「一次,二次」

此顯示的效果與普通模板雷同,此處以{{模板1}}做示範:

  • 輸入{{模板1}}
    顯示為「一次,检测到模板循环:Template:模板1

重定向

注意事项

模板编辑说明

參見