如何对多个变量统一检查相同条件(Lua语言)
问题解答
不行,你想的这种简化写法不能替代原代码,因为Lua的逻辑运算规则和你预期的不一样,会导致逻辑错误。
原因说明
Lua里只有nil和false被视为“假值”,像0、空字符串这类值在Lua里都是“真值”。而and运算符的行为是:
- 如果第一个操作数是假值,直接返回该假值;
- 否则返回第二个操作数。
所以y and x and z最终返回的是第一个遇到的假值(如果存在),否则返回最后一个变量的值。这和“三个变量都>=1”的逻辑完全不是一回事,举个反例就能看出来:
当y=0,x=2,z=3时:
- 原代码:
0>=1不成立,整个条件为false,不会执行代码块; - 简化写法:
y and x and z返回3,3>=1为true,会执行代码块,这和原逻辑完全相反。
正确的简化写法
如果想简化代码,可以用math.min函数,逻辑和原代码完全一致,而且更简洁:
if math.min(y, x, z) >= 1 then -- do stuff, but cooler end
因为如果三个数的最小值都大于等于1,那三个数必然都满足>=1的条件。
内容的提问来源于stack exchange,提问作者Katie
相关产品推荐
相关产品推荐

