Lua 中的三目运算符介绍 |
您所在的位置:网站首页 › 三目运算符多个条件判断的写法 › Lua 中的三目运算符介绍 |
导读
Lua 原生的语义并没有实现三目运算,一般是通过逻辑运算符 and 和 or 来模拟三目运算符的。
三目运算
熟悉 C/C++ 的老司机都知道三目运算 a ? b : c,这种写法替换简单的条件判断语句可以在不增加阅读难度的情况下,使代码尽量保持简洁。 int a, b, ret; //if-else if (a > b) ret = a; else ret = b; //三目运算符 ret = a > b ? a : b; Lua 中的三目运算Lua 原生的语义并没有实现三目运算,一般是通过逻辑运算符 and 和 or 来模拟三目运算符的。 Lua 中 and 和 or 都使用"短路求值(short_cur evaluation)",也就是说,它们只会在需要时才去评估第二个操作数。(《Lua程序设计》) local a, b, ret; ret = a > b and a or b穷举所有可能性: a > b 时: a > b and a –> true a or b –> aa a > b and a –> false a or b –> b 完美! Lua 中的三目运算符陷阱按照从特殊到一般的原则: 三目运算的一般形式a ? b : c a = true,结果为b a = false,结果为c 对应Lua中的a and b or c b = true a = true a and b –> true b or c –> b a = false a and b –> false b or c –> c b = false a = true a and b –> false b or c –> c a = false a and b –> false b or c –> c可以看到当 b = false 时,Lua模拟的 a and b or c 始终返回 c 并不能还原三目运算符的原貌。 《Lua程序设计》也建议这种情况使用 if-else 来避免。 一般化的 a and b or c那么有没有办法可以解决 b = false 失效的问题呢? 由此我联想到 C 语言有一道常规的考题:请使用宏定义写一个返回两个值中较小值的方法。 在校时第一次看到本题,第一反应如下: #define MIN(A,B) A |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |