赋值教程 |
|
设置变量的值称为赋值
> x = 1 > y = "hello" > print(x,y) 1 hello
在 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+1
和i
,然后再执行其他操作。求值后,第二行变为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
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