赋值教程

lua-users home
wiki

赋值

设置变量的值称为赋值

> x = 1
> y = "hello"
> print(x,y)
1       hello
您可以在参考手册的第 2.4.3 节中阅读有关赋值的更多信息。[1]

多重赋值

在 Lua 中,我们可以在单个语句中执行多重赋值,例如:

> x, y = 2, "there"
> print(x,y)
2       there 
右侧的值列表被分配给左侧=的变量列表。我们可以根据需要分配任意数量的值,并且它们不必都是相同类型。例如:
> a,b,c,d,e,f = 1,"two",3,3.14159,"foo",{ this="a table" }
> print(a,b,c,d,e,f)
1       two     3       3.14159 foo     table: 0035BED8

等号右侧的值可以是表达式,例如i+1。但是,左侧的值不能是表达式。

多重赋值有一些注意事项,如下所述。

赋值前进行求值

所有表达式都会先被求值。然后将求值后的表达式赋值。

> i = 7
> i, x = i+1, i
> print(i, x)
8       7

当 Lua 遇到第二行时,它会先求值表达式i+1i,然后再执行其他操作。求值后,第二行变为i, x = 8, 7。然后它从右到左执行赋值。(有关赋值顺序,请参见下文)。

交换值

赋值就像所有赋值都是同时进行的。因此,您可以使用多重赋值来交换变量的值。

> a,b = 1,2  -- set initial values
> print(a,b)
1       2
> a,b = b,a  -- swap values around
> print(a,b)
2       1
> a,b = b,a  -- and back again
> print(a,b)
1       2
请注意,不需要临时变量(例如bold = b; b = a; a = bold;)。在 C 语言编程中,使用临时变量很常见;但在 Lua 中则没有必要。

赋值顺序

多重赋值的执行顺序未定义。这意味着您不应该假设赋值是从左到右进行的。如果同一个变量或表引用在赋值列表中出现两次,结果可能会让您感到意外。

> a, a = 1, 2
> print(a)
1
在上面的示例中,Lua 从右到左执行赋值,例如a=2,然后是a=1。但是,我们不应该依赖于此在未来版本的 Lua 中保持一致。如果赋值顺序对您很重要,您应该使用单独的赋值语句。

列表大小不匹配

如果值列表比变量列表长,则会忽略多余的值。

> a,b,c = 1,2,3,4,5,6
> print(a,b,c)
1       2       3

如果值列表比变量列表短,Lua 会将值nil分配给没有值的变量。

> a,b,c,d = 1,2
> print(a,b,c,d)
1       2       nil     nil

最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2016 年 6 月 29 日凌晨 2:29 GMT (差异)