逻辑表达式从左往右读,就以为从左往右算——实际优先级是 not 最高、and 次之、or 最低。复合条件不加括号时,结合方式与阅读直觉不一致,条件在特定数值组合下走到错误分支。错误场景:
local vip = false
local hp, mp = 10, 10
local canEnter = not vip and hp > 0 or mp > 0
print(canEnter)
意图是"非 VIP 且(血或蓝大于 0)"才能挑战祖玛教主,实际解析为"(非 VIP 且血大于 0) 或 蓝大于 0"——蓝量 10 的 VIP 也被放了进去。
复杂条件一律加括号显式分组,不依赖脑内优先级表。规范写法。示例代码如下:
local canEnter = (not vip) and (hp > 0 or mp > 0)
print(canEnter)
not 与两个比较各自成组,and 连接两组,or 在括号内——结合方式与意图一致。
三步验证:用 VIP 高蓝、非 VIP 空血空蓝等四组状态跑歧义版,找出与意图不符的组合(VIP 高蓝被放入);加括号后四组全对;再把括号内的条件抽成具名局部变量,条件含义与执行顺序一目了然。
优先级也影响判假的简写:x == nil or x == false 等价于 not x。示例代码如下:
local flag = false
print(flag == nil or flag == false, not flag)
两个都输出 true——not x 一次覆盖两种假值,简写前先确认语义就是"判假",别把 0 也误当假值带进来。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、一行代码拆解:if price < WATCH[goods] then notify end —— 关注降价的…
【游戏】 一、业务场景:赛季结算发现一名玩家胜率 10% 却排在黄金段——历史计分只加不减,积分体系失效 3 个月;积分赛—…
【语法】 一、抛坑提问:3 对括号能组成多少种合法序列?答案是 5——卡塔兰数列:每一项等于前一项乘 2 倍的 2n 减 1…
【语法】 一、抛坑提问:不想用全局随机函数(怕多处共享种子互相干扰),可自实现一个独立随机序列——线性同余法三行核心:乘、加…
【游戏】 一、一行代码拆解:PENDING[outId] = {by = actor, at = now} —— 双人复核的…
【语法】 一、隐蔽陷阱:圆周率小数位背不出更多就不算理解随机模拟?用蒙地卡罗法随机撒点统计,10 万个点能把圆周率估到两位小…