我无法理解表达式""==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,false或nill?
lhf*_*lhf 25
当用作布尔值时,所有Lua值都评估为true,除了nil和false.这并不意味着评估为true的值等于 true.如果要将值转换v为布尔值,请使用not not v.
Yu *_*Hao 11
类型""是字符串,而不是布尔值,所以它不等于true或者false.
更一般地说,当Lua比较两个值时,它首先测试它们的类型,如果类型不匹配,Lua认为这两个值不立即相等.
当用作控制表达式时,Lua中唯一的错误值是false和nil,其他所有值都被评估为true值.一些流行的混淆包括数字0,空字符串"",字符串"0",它们都是真值.再次注意false并且nil不相等,因为它们是不同的类型.
回到示例中,在代码中
if "" then -- if ""==true
print "was true"
end
Run Code Online (Sandbox Code Playgroud)
Lua测试是否""是,false或者nil既然不是,那么Lua将条件视为真实值.