Lua 中的三目运算符介绍

您所在的位置:网站首页 三目运算符多个条件判断的写法 Lua 中的三目运算符介绍

Lua 中的三目运算符介绍

#Lua 中的三目运算符介绍 | 来源: 网络整理| 查看: 265

导读 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 –> a

a 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