ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Lua三元运算符中的坑

2020-01-14 20:41:22  阅读:318  来源: 互联网

标签:nil lua 43 运算符 Lua print 三元 true


在很多的语言中通常表示三元运算符为 a?b:c,但是lua中是没有三元运算符的。于是就有人想到用 a and b or c来模拟三元运算符,通常这样写的时候是不会有问题的,但是有种特殊情况他会出现意外。

了解这场意外,我们首先得了解lua中and 和 or 的机制。 lua语言中,把nil和false视为假,其他情况视为真。
在and中( a and b ):,当a为真时,lua会直接返回b的值,当a为假时,会直接返回a的值
在or中( a or b ) :,当 a为真时,会直接返回a的值,当a为假时,会直接返回b的值

print(nil and false)
print(true and 43)
print(12 and 43)
print(true or 43)
print(12 or 43)
print(nil or 43)
print(nil or false)

输出为
nil
43
43
true
12
43
false

看懂了上面的那些再回头看看lua中的"三元运算符",a and b or c 我们先把他改为 (a and b) or c,因此有下面几种情况

(a and b ) or c:当b为假时 ,无论a为真或者假,那么a and b 就为假,这时候值只能是 c 或者假,那么我们会发现如果有这么一个式子 3>4 and false or true 。这时候它就会返回true,显示3是不大于4的,这跟三元运算符想表达的结果完全不一样。
(a and b ) or c:当b为真时 ,当a为真,无论c为真或者假,它只会取b值,当a为假时,它只会取c的值

总之:如果想用 a and b or c的方式,那么我们b的值只能是真,不然还是乖乖的用 if-else吧。

qq_35369096 发布了2 篇原创文章 · 获赞 0 · 访问量 18 私信 关注

标签:nil,lua,43,运算符,Lua,print,三元,true
来源: https://blog.csdn.net/qq_35369096/article/details/103979336

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有