local a = {}
local b = {}
local c,d = (a~=nil) and 1,1 or 0,0 -- prints "1 1"
local c,d = (a==nil) and 1,1 or 0,0 -- prints "false 1"
print(c,d)
Run Code Online (Sandbox Code Playgroud)
我知道为什么会这样.有没有办法打印"0 0"?
有没有办法打印"0 0"?
不,因为and or表达式总是返回一个结果,而您看到的结果可能不是您认为的结果.
local c,d =(a~ = nil)和1,1或0,0 - 打印"1 1"
计算方法如下((a~=nil) and 1),(1 or 0),0.第一个表达式返回1,第二个(1 or 0)返回1,最后一个表达式被忽略(因为左侧有两个变量,右侧有三个表达式).
local c,d =(a == nil)和1,1或0,0 - 打印"false 1"
这是以类似的方式计算的,除了(a==nil)是false,这就是你获得第二个结果的原因.
要做你想做的事,你需要将它分成两个表达式:一个用于c,一个用于d.