在很多的语言中通常表示三元运算符为 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 私信 关注