为什么这个lua变量是nil,如果赋值语句后跟一个","

Mos*_*ito 2 lua

local i1 = 1
print(i1)

local i2 = 1,0
print(i2)

local i3 = 1,
print(i3)
Run Code Online (Sandbox Code Playgroud)

结果:

1
1
nil
Run Code Online (Sandbox Code Playgroud)

为什么i3是零?

Man*_*rse 6

除了少数例外,Lua忽略了空格和换行符.如果您删除换行符,则您拥有:

local i3 = 1, print(i3)
Run Code Online (Sandbox Code Playgroud)

您的打印在分配执行之前i3执行.

根据Lua 5.3手册的§3.3.3:

赋值语句首先计算其所有表达式,然后才执行赋值.

i3最终设定为1:

local i1 = 1
print(i1) --Prints '1'

local i2 = 1,0
print(i2) --Prints '1'

local i3 = 5

local i3 = 1,
print(i3) --Prints '5'
print(i3) --Prints '1'
Run Code Online (Sandbox Code Playgroud)