Lua中的三目运算符
0x00 三目运算 int a,b,ret;
//if-else
if (a > b)
ret = a;
else
ret = b;
//三目运算符
ret = a > b ? a : b;
0x01 Lua中的三目运算 local a,ret;
ret = a > b and a or b
穷举所有可能性:
完美! 0x02 Lua中的三目运算符陷阱
可以看到当b = false时,Lua模拟的a and b or c始终返回c并不能还原三目运算符的原貌。 0x03 一般化的a and b or c #define MIN(A,B) A < B ? A : B
然而这种写法在很多嵌套的使用环境中都不能返回正确的结果。比如:2 * MIN(3,4)展开为 2 * 3 < 4 ? 3 : 4 = 6 < 4 ? 3 : 4,结果为4。 #define MIN(A,B) ((A) < (B) ? (A) : (B))
还有好奇心的同学可以参考:宏定义的正确写法,三目运算的宏定义 从这个示例中,我就在想如何能保证a and b or c中b为真或者b不产生歧义呢?
0x04 总结 诚然,要想知道Lua中三目运算的形式,只需通过搜索就可以找到想要的答案。上述的推理过程多少有点先知道答案,故意往答案上靠的嫌疑。不过我坚信证明一个问题,结论并不是最重要的,重要的是论证的过程。本文仅以我对Lua粗浅的认知来尝试还原一般化的Lua三目运算的推导过程,如有更好的推理过程,可以一起交流。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |