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

Srd*_* M. 2 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
Run Code Online (Sandbox Code Playgroud)

boolean当值为,则返回正确true,但是在失败时返回false.为什么?

Ada*_*dam 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)