Справочное руководство по языку Lua 5.1 :: 2.3 - Значения и типы
2.3 - Переменные
Переменные используются для хранения значений в процессе выполнения программы. В Lua есть три вида переменных: глобальные, локальные и поля таблиц.
Отдельный идентификатор может обозначать глобальную или локальную переменную (либо формальный параметр функции, что является частным случаем локальной переменной) :
var ::= Name Имя
Где Name – идентификатор, определяемый в соответствии с §2.1.
Любая переменная считается глобальной, если она явно не объявлена как локальная (смотрите §2.4.7). Локальные переменные существуют в лексическом контексте: локальные переменные доступны функциям, определенным внутри этого контекста (смотрите §2.6).
До первого явного присвоения значением переменной является nil.
Квадратные скобки используются для доступа к элементу таблицы по индексу:
var ::= prefixexp '[' exp ']'
Способ доступа к глобальным переменным и полям таблицы может быть изменен с помощью мететаблиц. Доступ к переменной t[i] эквивалентен вызову gettable_event(t,i). (Полное описание функции gettable_event смотрите в §2.8. Эта функция недоступна в коде Lua, мы упоминули ее здесь в качестве примера).
Запись var.Name аналогична записи var["Name"]:
var ::= prefixexp '.' Name
Все глобальные переменные являются полями в обычных таблицах Lua, называемых таблицами окружения или кратко окружениями (смотреть §2.9). Каждая функция имеет ссылку на свое собственное окружение, и все глобальные переменные внутри этой функции ссылаются на данную таблиц. В момент создания функция наследует окружение вызывающей функции. Для получения таблицы окружения функии Lua можно вызвать функцию getfenv. Для перезаписи таблицы используется setfenv. (Вы можете манипулировать окружением C функций только с помощью отладочной библиотеки (смотрите §5.9).)
Обращение к глобальной переменной x эквивалентно _env.x, а также
gettable_event(_env, "x")
где _env – окружение выполняющейся функции. (Полное описание функции gettable_event смотрите в §2.8 . Эта функция недоступна в коде Lua, мы упоминули ее здесь в качестве примера).