为什么这个 Lua 变量是 nil,如果赋值语句后面跟着一个“,”

local i1 = 1
print(i1)

local i2 = 1,0
print(i2)

local i3 = 1,
print(i3)

结果:

1
1
nil

为什么 i3 是 nil?

点赞
用户485561
用户485561

除了少数例外,Lua 忽略空格和换行符。如果你移除换行符,你得到:

local i3 = 1, print(i3)

在执行 i3 赋值之前,你的 print 就已经执行了。

根据 Lua 5.3 手册的 §3.3.3

赋值语句首先计算所有表达式,然后再执行赋值。

最终 i3 被设置为 1

local i1 = 1
print(i1) --输出 '1'

local i2 = 1,0
print(i2) --输出 '1'

local i3 = 5

local i3 = 1,
print(i3) --输出 '5'
print(i3) --输出 '1'
2018-07-08 09:29:02
用户10041320
用户10041320

根据 Mankarse 的回复,如果在变量内容后面加上一个逗号而又没有结束符,系统会认为变量内容仍在继续,而且由于无法在变量内容中访问该变量,在打印结果中将导致 nil 的出现。因此,修复它的一个好方法是:

local i1 = 1
print(i1)

local i2 = 1,0
print(i2)

local i3 = 1
print(i3)

只需删除 1 后面的逗号。

2018-07-08 13:35:17