Tools 是非官方社区Wiki。社区文档正在编写中,欢迎参与。 Wiki编辑答疑群:717421103
版本250722.2
全站通知:

帮助:解析函数/ifexpr

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

ifexpr是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。

ifexpr

条件分支函数。条件是一个表达式。出自扩展 ParserFunctions

计算表达式后,根据结果的真假返回指定的两个值之一。空/零值为假,出错为假,否则为真。

语法

{{#ifexpr: 表达式 | 真值 | 假值 }}

  • 表达式:数学表达式(支持运算符与expr相同)
  • 真值(可选):表达式为真时的返回值
  • 假值(可选):表达式为假时的返回值

当表达式为空或包含错误时,会被视为假值。零值视为假,非零值视为真。

示例

  • 空表达式 {{#ifexpr: | yes | no }} → no
  • 逻辑运算 {{#ifexpr: 0 = 0 or 1 = 0 | yes }} → yes
  • 参数省略 {{#ifexpr: 1 < 0 | yes }}
  • 错误处理 {{#ifexpr: = | yes | no }}Expression error: Unexpected = operator.
  • 数值精度 {{#ifexpr: 12345678901234567 = 12345678901234568 | equal | not equal}} → equal
    • 说明:大整数比较会转换为浮点数导致精度丢失,建议使用#ifeq进行精确比较

底层代码

来自MediaWiki及其扩展的源代码,运行在服务端。此处仅供快速查阅,便于更充分的挖掘其“特性”。

/** mediawiki-extensions-ParserFunctions-REL1_37\includes\ParserFunctions.php
 * {{#ifexpr: expression | value if true | value if false }}
 *
 * @link https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##ifexpr
 *
 * @param Parser $parser
 * @param PPFrame $frame
 * @param array $args
 * @return string
 */
public static function ifexpr( Parser $parser, PPFrame $frame, array $args ) {
	$expr = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
	$then = $args[1] ?? '';
	$else = $args[2] ?? '';

	try {
		$result = self::getExprParser()->doExpression( $expr );
		if ( is_numeric( $result ) ) {
			$result = (float)$result;
		}
		$result = $result ? $then : $else;
	} catch ( ExprError $e ) {
		return '<strong class="error">' . htmlspecialchars( $e->getUserFriendlyMessage() ) . '</strong>';
	}

	if ( is_object( $result ) ) {
		$result = trim( $frame->expand( $result ) );
	}

	return $result;
}
代码逻辑:
  • 计算表达式,尝试将结果转换为浮点数格式
  • 判断表达式是否为真
  • 如出错,以红色警告形式展示
  • 结果wikitext将被展开并移除头尾空格

实际用例

一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考
碧蓝航线 - blhx

原神 - ys

战双帕弥什 - zspms

明日方舟 - arknights

恋与深空 - lysk

崩坏:星穹铁道 - sr

赛马娘 - umamusume

第五人格 - dwrg

坎特伯雷公主与骑士唤醒冠军之剑的奇幻冒险 - gt

黑神话:悟空 - wukong

WIKI实验室 - tools

地下城堡2 - dxcb2

东方归言录 - touhoulostword

白荆回廊 - bjhl

赛尔计划 - seerplan

幻塔 - ht

重返未来:1999 - reverse1999

偶像大师灰姑娘女孩 - imascg

公主连结 - pcr

无期迷途 - wqmt

红警3 - redalert3

生死狙击2 - ssjj2

戴森球计划 - dsp

梦幻模拟战 - langrisser

StardewValley星露谷物语 - stardewvalley

赛尔号星球大战 - seerwar

方舟指令 - fzzl

深空之眼 - dhmmr

克鲁赛德战记 - cq

艾尔登法环 - eldenring

铃兰之剑 - llzj

烟雨江湖 - yanyu

悠久之树 - yjzs

忍者必须死3 - nmd3

灰烬战线 - hjzx

天地劫 - tdj

怪物弹珠 - gwdz