赋值教程

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

RecentChanges · preferences
编辑 · 历史
最后编辑于 2016 年 6 月 28 日 下午 8:29 GMT (差异)