You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Wiki编写更简洁的解析函数:实现输入关卡输出所属区间的模板

问题背景

需要在游戏相关Wiki上制作一个模板,实现输入指定关卡数值即可返回其所属关卡区间的效果,例如输入"42"输出"1-50"。
目前通过多层嵌套的#ifexpr实现了功能,也尝试过使用#switch,但代码更冗余,想了解更简洁的实现方案,目的是进一步学习解析函数的相关用法。
现有模板代码如下:

{{#ifexpr:{{{1|}}}<=50|1-50|<!--
 -->{{#ifexpr:{{{1|}}}<=95|51-95|<!--
 -->{{#ifexpr:{{{1|}}}<=140|96-140|<!--
 -->{{#ifexpr:{{{1|}}}<=185|141-185|<!--
 -->{{#ifexpr:{{{1|}}}<=230|186-230|<!--
 -->{{#ifexpr:{{{1|}}}<=275|231-275|<!--
 -->{{#ifexpr:{{{1|}}}<=320|276-320|<!--
 -->{{#ifexpr:{{{1|}}}<=365|321-365|<!--
 -->{{#ifexpr:{{{1|}}}<=410|366-410|<!--
 -->{{#ifexpr:{{{1|}}}<=455|411-455|<!--
 -->{{#ifexpr:{{{1|}}}<=500|456-500|<!--
 -->{{#ifexpr:{{{1|}}}<=545|501-545|<!--
 -->{{#ifexpr:{{{1|}}}<=590|546-590|<!--
 -->{{#ifexpr:{{{1|}}}<=620|591-620|<!--
 -->{{#ifexpr:{{{1|}}}<=650|621-650|<!--
 -->{{#ifexpr:{{{1|}}}<=680|651-680|<!--
 -->{{#ifexpr:{{{1|}}}<=710|681-710|<!--
 -->{{#ifexpr:{{{1|}}}<=740|711-740|<!--
 -->{{#ifexpr:{{{1|}}}<=770|741-770|<!--
 -->{{#ifexpr:{{{1|}}}<=800|771-800|<!--
 -->{{#ifexpr:{{{1|}}}<=830|801-830|<!--
 -->{{#ifexpr:{{{1|}}}<=860|831-860|<!--
 -->{{#ifexpr:{{{1|}}}<=890|861-890|891-920}}}}}}}}}}}}}}}}}}}}}}}}
优化方案

观察区间规则可以发现明显的分段规律:

  • 1~50为首个独立分段
  • 51~590区间内每45关为一个分段
  • 591~920区间内每30关为一个分段

可以用数学计算直接推导区间,无需多层嵌套判断,代码如下:

{{#ifexpr:{{{1|0}}} < 1 | 输入无效
| {{#ifexpr:{{{1|}}} <= 50 | 1-50
| {{#ifexpr:{{{1|}}} <= 590
  | {{#expr: 51 + 45 * floor(({{{1|}}} - 51)/45) }}-{{#expr: 50 + 45 * (floor(({{{1|}}} - 51)/45) + 1) }}
  | {{#expr: 591 + 30 * floor(({{{1|}}} - 591)/30) }}-{{#expr: 590 + 30 * (floor(({{{1|}}} - 591)/30) + 1) }}
}} }} }}

代码说明

  1. 先做输入合法性校验,小于1的输入直接返回无效提示,可根据需求修改提示内容或直接移除校验逻辑
  2. 首段特殊处理直接返回1-50
  3. 51到590段:通过floor函数计算当前关卡属于第几个45关分段,直接推导首尾数值
  4. 590以上段:同理按30关的分段规则计算首尾数值

该方案代码量远低于嵌套#ifexpr的写法,后续如果区间规则调整,只需要修改对应分段的步长和阈值即可,维护成本更低。

内容的提问来源于stack exchange,提问作者oli_vi_er

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:27:06