赋值教程 |
|
为变量设置值是赋值
> 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