Добавлен , опубликован

Руководство по Lua 5.1

Содержание:
Назначение значений переменным называется присваиванием.
    > 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     nil   
значения справа могут быть и выражениями (например, 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  -- установка начальных значений
    > print(a,b)
    1       2
    > a,b = b,a  -- обмен значениями
    > print(a,b)
    2       1
    > a,b = b,a  -- и обратно
    > print(a,b)
    1       2
Заметьте, нам не нужны временные переменные, как это было бы нужно в С (bold = b; b = a; a = bold;)

Порядок присваивания

Порядок, в котором происходит присваивание значений, не определён. Он не всегда происходит слева направо; Если, к примеру, вы присваиваете одной и той же переменной два значения, готовьтесь к неожиданным сюрпризам:
    > a, a = 1, 2
    > print(a)
    1
В указанном выше примере присваивание происходит справа налево: сначала a=2 а потом a=1
Если вам важен порядок присваивания, назначайте значения переменным на разных строках.

Несовпадающий размер списков

Если список значений больше списка переменных, лишние значения игнорируются:
    > a,b,c = 1,2,3,4,5,6
    > print(a,b,c)
    1       2       3
Если же список значений короче списка переменных, оставшимся переменным будет присвоен тип nil
    > a,b,c,d = 1,2
    > print(a,b,c,d)
    1       2       nil     nil
данная статья является вольным переводом с сайта lua-users.org
с возможными дополнениями и изменениями