一、隐蔽陷阱:抛坑提问——为什么 drop = drop or "裁决之杖" 在 drop 为 false 时永远拿到裁决之杖?因为 and 与 or 返回的不是真值而是操作数本身。
二、底层原理:a and b:a 为假返回 a,否则返回 b;a or b:a 为真返回 a,否则返回 b——返回值是参与运算的操作数而非布尔值。这既是 or 兜底的原理,也是 0 与空串被误兜的根源。
三、正确代码:
错误写法:
print(false and 1) -- false(返回操作数本身)
print(nil or "裁决之杖") -- 裁决之杖
print(0 or "默认") -- 0,0 是真值
正确写法:
local quality = tonumber(getplayvar(actor, 0, "Quality")) or 0
local grade = quality > 0 and "有品质掉落" or "普通掉落"
sendmsg(actor, 1, "祖玛教主掉落判定:" .. grade)
四、引擎验证:对 0、false、nil 三种输入跑 and/or 组合,对照操作数返回规则表逐格核对。
五、FAQ:问:and 链返回的是布尔吗?答:不是,返回的是决定结果的那个操作数本身。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、业务场景 帮会福利发直接物资容易通胀,玩家也缺一个每日仪式感的小赌注。聚宝盆上线:成员每日投 5000 金币入…
【游戏】 一、业务场景 自己跑商两城来回要 40 分钟,物价波动还可能亏本,休闲玩家玩不起。车马行上线:车马行发布货运委托,…
【语法】 一、隐蔽陷阱 五堆石子各 3、6、2、8、4 颗,每次只能合并相邻两堆,代价为两堆之和:随手按从左到右的顺序合并,…
【语法】 一、隐蔽陷阱 数组每个元素表示在该位置最多能向前跳几步:从第一位出发能否抵达末格?回溯所有跳法是指数级组合,一大半…
【游戏】 一、业务场景 裁缝铺只卖成衣,手工制品缺位,绣娘的手艺没有展示舞台。绣品大赛上线:每周发布绣样主题,用丝线材料限时…
【语法】 一、隐蔽陷阱 丑数是只含质因数 2、3、5 的正整数:逐个数字试除判因数找第 n 个,n 到几千就要扫几十万个数—…