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

时间:2016-08-02 21:11:38

标签: lua

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时失败。为什么呢?

1 个答案:

答案 0 :(得分:5)

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

如果您使用明确的优先级重写表达式,您可以看到为什么会得到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