Lua,if语句成语无法返回正确的布尔值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua,if语句成语无法返回正确的布尔值相关的知识,希望对你有一定的参考价值。

local a = (true==true) and false or nil -- returns nil
local a = (true==true) and true or nil -- returns true
local a = (true==true) and not false or nil -- returns true
local a = (true==true) and not true or nil -- returns nil

当值为boolean时返回正确的true,但是当false时失败。为什么?

答案

布尔习惯用法通过使用快捷方式评估(仅在必要时评估第二个操作数)。

如果你用明确的优先级重写表达式,你可以看到为什么你会得到nil

(true and false) or nil     =>  false or nil  => nil
(true and true) or nil      =>  true or nil   => true
(true and not false) or nil =>  true or nil   => true
(true and not true) or nil  =>  false or nil  => nil

Logical OperatorsProgramming in Lua部分解释了这个成语:

另一个有用的习语是(a和b)或c(或简称a和b或c,因为它的优先级高于或者),这相当于C表达式

一个 ? b:c

只要b不是假的。例如,我们可以使用类似的语句选择最多两个数字x和y

max =(x> y)和x或y

为什么b不能成为false?因为评估将始终返回false

1 > 0 and false  --> false
1 < 0 and false  --> false

以上是关于Lua,if语句成语无法返回正确的布尔值的主要内容,如果未能解决你的问题,请参考以下文章

Lua学习六----------Lua流程控制

带有布尔返回的方法

布尔函数:if 语句或简单返回

布尔函数参数和返回

如何通过比较同一行上的三个变量来返回布尔值?

Lua风格的Kotlin中表达式是否为空?