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,
мы упоминули ее здесь в качестве примера).
|