Mediawiki 模板行为的不一致从何而来?

Where does the inconsistency in behaviour of Mediawiki templates come from?

此问题与 Mediawiki 语法及其模板和解析器函数的不一致行为有关。

当直接放在 wiki 页面中时,这两个片段都按预期工作:

{{#ifeq:{{{1|}}}|{{{2}}}|{{{1}}}}}

{{#ifeq:{{{1|{{FULLPAGENAME}}}}}|{{NAMESPACE:{{{1|{{FULLPAGENAME}}}}}}}:{{ROOTPAGENAME:{{{1|{{FULLPAGENAME}}}}}}}|{{{1|{{FULLPAGENAME}}}}}}}

第一个片段很简单。第二个输出页面的全名,但前提是它不是子页面。

但是,当每个片段都放在模板中时,假设第一个片段在 Template:IsEqual 中,第二个片段在 Template:IsRootPage,然后它们都包含在某个页面中,例如每个输出都是#if 测试的主题,第一个继续按预期运行,而第二个始终产生 字符串#if 语句的部分不为空

所以:

{{#if:{{IsEqual|A|B}}|equal|unequal}} 将输出“不相等”

同时:

{{#if:{{IsRootPage}}|root|non-root}} 将始终输出“root”,即使放置在子页面中或非首页名称作为参数传递给 Template:IsRootPage,驱动模板到return 没有。

根据 documentation of #if:

This function evaluates a test string and determines whether or not it is empty. A test string containing only white space is considered to be empty.

此外,即使在#ifeq 测试失败时将 Template:IsRootPage 修改为空字符串,通过在模板,即添加第三个 |其次是 nothing/space.

似乎在模板的输出和 #if 解析器函数之间发生了一些事情。

对于这种行为差异是否有已知的解释?

是否有一些语法 hack 可以使其按预期工作?

还是我遗漏了一些显而易见的东西?


编辑:此行为在 Mediawiki 1.35.5 中出现

当页面有子页面时,您的 sample template 不会 return 空字符串。它 returns <nowiki/> 其中 {{#if:<nowiki/>|yes|no}} 正确 returns yes.

如果删除 <nowiki/>,您将获得所需的行为。