Lua,如果声明成语

Srd*_* M. 2 lua

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"?

Pau*_*nko 5

有没有办法打印"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.