模板:虚拟模板/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

重定向

注意事项

模板编辑说明

参见