Документация Скачать
Поиск:

Справочное руководство по языку Lua 5.1



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

Перепечатка материалов только с разрешения владельцев сайта Lua.ru.