从 C 系语言转来的学员写 if count then 期待 count 为 0 时判假——Lua 中只有 nil 与 false 为假,0 是真值!判定"有没有"时误用 if count 会在 count 为 0 时走进有货分支。数值的是非判断必须显式与 0 比较。错误场景:
local count = 0
if count then
sendmsg(nil, 1, "背包有物品")
end
count 为 0 也提示有物品——0 在 Lua 中为真。
数值判断显式比较:大于零、不等于零,语义写在明面上。规范写法。示例代码如下:
local count = tonumber(getplayvar(nil, "GLOBAL", "BagCount")) or 0
if count > 0 then
sendmsg(nil, 1, "背包有物品,共 " .. count .. " 件。")
else
sendmsg(nil, 1, "背包为空。")
end
判空与判零分离:变量缺失(nil)与数量为零(0)是两种业务状态,分别处理。示例代码如下:
local function hasStock(cnt)
return cnt ~= nil and cnt > 0
end
三步验证:count 分别传 0、nil、5,观察 if count 与 if count > 0 的分支差异;tonumber(nil) 返回 nil 的链路验证;hasStock 对三种入参的返回逐一对号。
同样的差异出现在字符串:"0" 是真值且与数字 0 不等,外部传入的数字串先 tonumber 归一再判。示例代码如下:
local function toCount(v)
return tonumber(v) or 0
end
if toCount("0") > 0 then
print("不会进来")
end
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
一、一行代码拆解:POOL = POOL + cost 0.5 —— 奖池滚存的核心:每次抽取把成本的一半注入奖池,未中滚存…
一、隐蔽陷阱:强化费用每星固定 500 金,玩家三天点到满星 15 星;成本按 2 的幂增长(500 乘 2 的星减一次方)…
一、线上事故:组队匹配全服一张等待表逐个比对等级差,300 人同时排队时每次匹配 300 次比较还配错段;按等级段分桶,同段…
一、抛坑提问:回收价按原价五折一口价,强化 12 的神装与白板同价,玩家宁可分解;回收价等于原价乘折旧系数,强化、耐久、稀有…
一、抛坑提问:50×50 城墙格子用嵌套表存,两层寻址多层开销——压平成一维数组,idx = (y-1) 50 + x,一次…
一、一行代码拆解:st = {n = st.n + 1, sum = st.sum + v} —— 计数、求和、最大、最小四…