Lua""== true等于""== false

Hen*_*nyH 7 lua

我无法理解表达式""==true""==false两者的评价方式false.

在lua解释器和ilua中尝试以下结果会产生相同的输出:

> =""==true
false
> =""==false
false
Run Code Online (Sandbox Code Playgroud)

或者执行以下操作:

print(""==true)
print(""==false)
print(""==nil)
Run Code Online (Sandbox Code Playgroud)

输出

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
false
false
false
> 
Run Code Online (Sandbox Code Playgroud)

另一个例子:

> =""~=true
true
> =""==false
false
Run Code Online (Sandbox Code Playgroud)

运行以下代码时:

if "" then -- if ""==true
    print "was true"
end 

if not "" then -- if ""==false
    print "was not true"
end 
Run Code Online (Sandbox Code Playgroud)

输出是(看似不一致)

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
was true
> 
Run Code Online (Sandbox Code Playgroud)

正如预期的Lua FAQ所述

类C语言将0视为等同于false,但对于Lua而言则不然.只有明确的false或nil等同于false.如果有疑问,请明确条件,例如,如果val == nil则... end,除非该值实际上是布尔值.

价值如何等于true,falsenill

lhf*_*lhf 25

当用作布尔值时,所有Lua值都评估为true,除了nil和false.这并不意味着评估为true的值等于 true.如果要将值转换v为布尔值,请使用not not v.

  • 相关的手册条目是http://www.lua.org/manual/5.2/manual.html#3.4.4. (6认同)

Yu *_*Hao 11

类型""是字符串,而不是布尔值,所以它不等于true或者false.

更一般地说,当Lua比较两个值时,它首先测试它们的类型,如果类型不匹配,Lua认为这两个值不立即相等.

当用作控制表达式时,Lua中唯一的错误值是falsenil,其他所有值都被评估为true值.一些流行的混淆包括数字0,空字符串"",字符串"0",它们都是真值.再次注意false并且nil不相等,因为它们是不同的类型.

回到示例中,在代码中

if "" then -- if ""==true
    print "was true"
end 
Run Code Online (Sandbox Code Playgroud)

Lua测试是否""是,false或者nil既然不是,那么Lua将条件视为真实值.

  • @HennyH当Lua看到`if n`时,它测试`n`既不是'false`也不是'nil`.请注意,虽然`false`和`nil`都被视为假值,但它们也不相等. (3认同)