English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Перед использованием переменной, её необходимо声明 в коде, то есть создать переменную.
Перед выполнением кода компилятор должен знать, как резервировать пространство для переменных в памяти, чтобы хранить значения переменных.
Переменные в Lua имеют три типа: глобальные переменные, локальные переменные, поля таблицы.
В Lua все переменные являются глобальными, даже в блоке или функции, если не объявлены явно как локальные переменные.
Область действия локальных переменных начинается от места их объявления до конца блока.
Значение по умолчанию для всех переменных nil.
-- скрипт файла test.lua a = 5 -- глобальная переменная local b = 5 -- локальная переменная function joke() c = 5 -- глобальная переменная local d = 6 -- локальная переменная end joke() print(c, d) --> 5 nil do local a = 6 -- локальная переменная b = 6 -- повторное присваивание локальной переменной print(a, b); --> 6 6 end print(a, b) --> 5 6
Результат выполнения примера выше:
$ lua test.lua 5 nil 6 6 5 6
Присваивание - это最基本的 способ изменить значение переменной и значение поля таблицы.
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 продолжает использовать следующий стратегию на основе количества переменных:
a. Количество переменных > количество значений - дополняется nil по количеству переменных Количество переменных b < количество значений Избыточные значения будут игнорироваться
a, b, c = 0, 1 print(a,b,c) --> 0 1 nil a, b = a+1, b+1, b+2 -- Worth 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.
Следует использовать локальные переменные по возможности, это имеет два преимущества:
1. Избегайте命名ных конфликтов.
2. Скорость доступа к локальным переменным быстрее, чем к глобальным.
Индексирование таблицы производится с помощью фигурных скобок []. Lua также предоставляет оператор .
t[i] t.i -- Упрощенная запись при индексе в виде строки gettable_event(t,i) -- Поступление индекса подобно такому вызову функции
> site = {} > site["key"] = "ru.oldtoolbag.com" > print(site["key"]) ru.oldtoolbag.com > print(site.key) ru.oldtoolbag.com