第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但有一些差异。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还可以帮助支持 Lua 项目


4.1 – 赋值

赋值是更改变量或表字段值的常用方法

    a = "hello" .. "world"
    t.n = t.n + 1

Lua 允许多重赋值,其中可以一步将值列表分配给变量列表。两个列表的元素都用逗号分隔。例如,在赋值

    a, b = 10, 2*x
中,变量 a 获得值 10,b 获得 2*x

在多重赋值中,Lua 首先计算所有值,然后才执行赋值。因此,我们可以使用多重赋值来交换两个值,如下所示

    x, y = y, x                -- swap `x' for `y'
    a[i], a[j] = a[j], a[i]    -- swap `a[i]' for `a[j]'

Lua 始终将值的数目调整为变量的数目:当值列表短于变量列表时,额外的变量会将 nil 作为其值;当值列表长于变量列表时,额外的值会被静默丢弃

    a, b, c = 0, 1
    print(a,b,c)           --> 0   1   nil
    a, b = a+1, b+1, b+2   -- value of b+2 is ignored
    print(a,b)             --> 1   2
    a, b, c = 0
    print(a,b,c)           --> 0   nil   nil
上述示例中的最后一个赋值显示了一个常见错误。要初始化一组变量,您必须为每个变量提供一个值
    a, b, c = 0, 0, 0
    print(a,b,c)           --> 0   0   0

实际上,大多数之前的示例都是有点人为的。我很少使用多重赋值,只是为了在一行中编写多个赋值。但我们经常确实需要多重赋值。我们已经看到一个示例,即交换两个值。更常见的用法是从函数调用中收集多个返回值。正如我们稍后将详细讨论的那样,函数调用可以返回多个值。在这种情况下,单个表达式可以为多个变量提供值。例如,在赋值

    a, b = f()
中,f() 返回两个结果:a 获得第一个结果,b 获得第二个结果。