安全长度与洞检测。示例代码如下:
local function safeLen(t)
local n = 0
while t[n + 1] ~= nil do
n = n + 1
end
return n
end
local function hasHole(t)
return safeLen(t) ~= #t
end
掉落表校验接线。示例代码如下:
local drops = { "祖玛头像", "绿宝石" }
drops[4] = "裁决之杖"
print(#drops)
print(safeLen(drops))
连续表上 safeLen 与 # 等价且都是常数成本(safeLen 停在第一个 nil);百万级表一次调用的差异在纳秒级。有洞表上两者的差异是正确性问题而非性能问题——# 的返回不确定,safeLen 恒定。用 table.remove 从尾部收缩的表 # 行为稳定;中途置 nil 的表才需要 safeLen 兜底。
三个不适用场景:一是以字符串为键的混合表,# 本来只看连续数字下标,safeLen 同样无意义;二是巨大的稀疏表(下标跳到几十万),逐位探测不如维护一个计数器字段——高频增删的表直接存 n 字段最稳;三是引擎批量传参接口要求严格连续数组的场景,传入前先重建连续下标,别赌 # 的边界。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、抛坑提问:宠物跟随走直线太生硬,怎么走出圆滑弧线?二次贝塞尔曲线用两个端点加一个控制点,参数从 0 走到 1 …
【游戏】 一、一行代码拆解:SUB[missing] = actual —— 材料替换的全部骨架:替换表声明等价材料对,合成…
【游戏】 一、一行代码拆解:if WINNER == nil then WINNER = actor end —— 抢答判定…
【语法】 一、隐蔽陷阱:技能范围绕施法者旋转,逐点手算坐标容易把余弦与正弦位置写反——二维旋转公式为新横等于旧横乘余弦减旧纵…
【游戏】 一、一行代码拆解:BUYS = BUYS + 1 —— 次数增购的全部骨架:每日 3 次耗尽后可付费增购 1 次,…
【游戏】 一、一行代码拆解:LEND[id] = {who = actor, at = os.time()} —— 仓库借还…