Lua中的三目运算怎么理解
这篇文章主要讲解了“Lua中的三目运算怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Lua中的三目运算怎么理解”吧!
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
熟悉 C/C++ 的老司机都知道三目运算 a ? b : c,这种写法替换简单的条件判断语句可以在不增加阅读难度的情况下,使代码尽量保持简洁。
inta,b,ret;//if-elseif(a>b)ret=a;elseret=b;//三目运算符ret=a>b?a:b;Lua 中的三目运算
Lua 原生的语义并没有实现三目运算,一般是通过逻辑运算符 and 和 or 来模拟三目运算符的。
Lua 中 and 和 or 都使用”短路求值(short_cur evaluation)”,也就是说,它们只会在需要时才去评估第二个操作数。
locala,b,ret;ret=a>bandaorb
穷举所有可能性:
a > b 时:
a>banda–>trueaorb–>a
a
a>banda–>falseaorb–>b
完美!
Lua 中的三目运算符陷阱按照从特殊到一般的原则:
三目运算的一般形式a ? b : c
a = true,结果为b a = false,结果为c
对应Lua中的a and b or c
可以看到当 b = false 时,Lua模拟的 a and b or c 始终返回 c 并不能还原三目运算符的原貌。
一般化的 a and b or c那么有没有办法可以解决 b = false 失效的问题呢?
由此我联想到 C 语言有一道常规的考题:请使用宏定义写一个返回两个值中较小值的方法。
在校时第一次看到本题,第一反应如下:
#defineMIN(A,B)A
然而这种写法在很多嵌套的使用环境中都不能返回正确的结果。比如:2 * MIN(3, 4)展开为 2 * 3
#defineMIN(A,B)((A)
还有好奇心的同学可以参考:宏定义的正确写法,三目运算的宏定义
从这个示例中,我就在想如何能保证 a and b or c 中 b 为真或者 b 不产生歧义呢?
感谢各位的阅读,以上就是“Lua中的三目运算怎么理解”的内容了,经过本文的学习后,相信大家对Lua中的三目运算怎么理解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。