Lua “卢阿”&引用==“真的等于”&引用==假的
我无法理解表达式Lua “卢阿”&引用==“真的等于”&引用==假的,lua,Lua,我无法理解表达式“”==true和“”==false如何计算为false 在lua解释器和ilua中尝试以下操作会产生相同的输出: > =""==true false > =""==false false 或执行以下操作: print(""==true) print(""==false) print(""==nil) 输出 Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio false false false > 另一
“”==true
和“”==false
如何计算为false
在lua解释器和ilua中尝试以下操作会产生相同的输出:
> =""==true
false
> =""==false
false
或执行以下操作:
print(""==true)
print(""==false)
print(""==nil)
输出
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
false
false
false
>
另一个例子:
> =""~=true
true
> =""==false
false
运行以下代码时:
if "" then -- if ""==true
print "was true"
end
if not "" then -- if ""==false
print "was not true"
end
输出为(似乎不一致)
正如Lua常见问题解答所预期的那样
类C语言认为0等同于false,但事实并非如此
为了卢阿。只有显式false或nil与false等效。什么时候
如有疑问,请明确条件,例如,如果val==nil,则。。。结束
除非该值实际上是布尔值
一个值怎么可能不等于true
,false
或nill
?免责声明:我没有使用lua的经验,这是一个有根据的猜测
这可能是因为“”是一个空字符串,所以Lua可能将其计算为长度为零的字符串。因为它是一个有效的对象,它不会等于true、false或nil,它将等于一个长度为零的字符串。的类型是string,而不是boolean,因此它既不等于true
也不等于false
更一般地说,当Lua比较两个值时,它首先测试它们的类型,如果类型不匹配,Lua认为这两个值不立即相等
当用作控制表达式时,Lua中唯一的假值是false
和nil
,其他所有值都作为真值计算。一些常见的混淆包括数字0
、空字符串“”
、字符串“0”
,它们都是真值。再次注意,false
和nil
不相等,因为它们是不同的类型
回到例子,在代码中
if "" then -- if ""==true
print "was true"
end
Lua测试“
是否为false
或nil
,因为两者都不是,所以Lua将该条件视为真值。当用作布尔值时,除nil和false外,所有Lua值都计算为真。这并不意味着计算为true的值等于true。如果要将值v
转换为布尔值,请使用非v
免责声明:我对Lua唯一了解的是我对Lua一无所知
似乎Lua使用==
和在控制结构中进行的比较(if
,while
,for
等)不同地处理相等比较
据报道,
控件结构的条件表达式可以返回任何值。
false和nil都被认为是错误的。所有值均不同于零
和false被视为true(特别是数字0和
空字符串也为true)
这似乎与你所看到的一致。即:
"" == false => false
"" == true => false
"" == nil => false
因为比较运算符似乎正在检查类型和值
但是,如果在控制结构的条件中使用该变量,则行为会略有不同。就是
if "" then
print "Hello world!"
end
将打印你好世界因为空字符串不同于nil
和false
,因此计算结果为真实值。好吧,看起来就像“
是一个空字符串。所以,它不是true
,也不是false
,也不是nill
。我不明白为什么应该这样做?我想问题是我假设字符串会有truty/falsy值。@HennyH,但你引用的文档说它们没有。那么为什么你仍然对此感到惊讶呢?顺便说一下@HennyH,你通常都在使用Python,对吗>>“”==True-False>>>“”==False-False>>>“”==None-False
:)这意味着lua对的解释不同于“”==True
“部分的如果“然后打印”是真的。是否存在区分这些上下文的规范或位置?@HennyH当Lua看到如果n
,它会测试n
是否既不是false
也不是nil
。再次注意,虽然false
和nil
都被视为假值,但它们也不相等。啊,这更有意义。
if "" then
print "Hello world!"
end