想取字符串末尾几位,学员用 #s 减法手算起点,繁琐且容易差一;负下标一行搞定却没人敢用——误以为负数会像数组一样越界报错。实际 sub 的负下标从 -1(末字符)倒数,超界时静默收缩到边界,不报错。错误场景:
local code = "ART260925"
print(string.sub(code, #code - 3))
能跑,但每次都要心算长度减法;换成 string.sub(code, -4) 一目了然。
尾部截取直接负下标,头部截取正下标,区间混用也合法。规范写法。示例代码如下:
local code = "ART260925"
print(string.sub(code, 1, 3))
print(string.sub(code, -4))
输出 ART 与 0925——前 3 位是服务器标记,后 4 位是流水尾号。
三步验证:用裁决之杖的装备编号串做前缀校验(前 3 位是分类标记);负下标取末 4 位做尾号比对;验证越界行为——string.sub(code, 5, 100) 只截到末尾、不报错,超长请求静默收缩。
负下标与正起点组合可表达"截到倒数第 n 个之前"。示例代码如下:
local code = "ART260925"
print(string.sub(code, 1, -5))
1 到 -5 表示从头部截到倒数第 5 个字符之前,输出 ART26——区间两端各自独立,一头固定一头倒数。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、一行代码拆解:hp = 10000 + teamN 5000 —— 运镖劫镖的全部骨架:镖车按护送人数增强血量…
【语法】 一、隐蔽陷阱:逐个插入建堆要 n 次上浮;自底向上从末个非叶子节点倒序下沉,一遍线性把乱序表调成合法堆。 二、底层…
【语法】 一、抛坑提问:一个数等于它全部真因子之和就叫真因子和数,6 等于 1 加 2 加 3——判定只需枚举到平方根配对求…
【游戏】 一、一行代码拆解:n = math.floor(have / 5) —— 批量合成的全部骨架:5 个碎片合成 1 …
【游戏】 一、一行代码拆解:if INSURED[actor] then 赔付 end —— 装备保险的全部骨架:死亡掉落判…
【语法】 一、隐蔽陷阱:找第 K 小元素先全量排序再取下标,n log n 浪费在无关排序上;快速选择借用快排分区——每轮只…