MediaWiki解析器函数#if用于未定义的模板参数

use*_*409 4 parsing mediawiki

我有一个安装了Semantic MediaWiki扩展的MediaWiki站点.我想测试字符串是否为空.为此,我做:

{{#if: {{{transcript.lncrna}}} | Yes | No}}
Run Code Online (Sandbox Code Playgroud)

显然,{{{transcript.lncrna}}}是空的,它什么都没有.但是,解析器函数#if告诉我是答案.

怎么了?

leo*_*leo 6

当涉及MediaWiki解析器函数时,变量为空,变量未定义是两个不同的东西.在您的情况下,{{{transcript.lncrna}}}很可能没有定义.然后,MediaWiki会像你试图写出文本"{{{transcript.lncrna}}}"那样对待它,当然,这会使if语句返回true.

要检查参数是否为空,您需要添加一个空的默认值,写入{{{transcript.lncrna|}}}(注意水平条):

{{#if: {{{transcript.lncrna|}}} | Yes | No}}
Run Code Online (Sandbox Code Playgroud)

这是一张具有不同可能性的表格

             value of {{{param}}}: undefined | nothing | whitespace | something
--------------------------------------------------------------------------------
{{#if: {{{param|}}} | Yes | No}} |    No     |   No    |     No     |    Yes
{{#if: {{{param}}}  | Yes | No}} |    Yes    |   No    |     No     |    Yes
Run Code Online (Sandbox Code Playgroud)