Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua “卢阿”&引用==“真的等于”&引用==假的_Lua - Fatal编程技术网

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