Раздел: CronosPRO Дата редакции: 09.07.2013 id статьи: 1512

Работа с переменными в Lua

Переменные используются для хранения значений в процессе выполнения скрипта.

Имена переменных в Lua

Именами (идентификаторами) переменных в Lua могут быть любые последовательности из букв, цифр и символа подчеркивания, начинающиеся не с цифры.

Обратите внимание

  • Язык Lua различает регистр символов, поэтому abc, Abc, ABC являются различными именами.
В таблице ниже приведены слова, которые зарезервированы языком Lua и не могут использоваться в именах переменных:
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while
Кроме того, все имена, начинающиеся с символа подчеркивания, за которым идут заглавные буквы (например, _VERSION) также являются зарезервированными.

Какие переменные бывают в Lua?

Переменные в Lua могут быть глобальными и локальными. Если переменная не объявлена явно как локальная, она считается глобальной.

Глобальные переменные Lua
Глобальная переменная появляется в момент присваивания ей первого значения. До присваивания первого значения обращение к глобальной переменной даёт nil.
MsgBox(tostring (g))  --> nil
g = 1
MsgBox(tostring (g))  --> 1
Глобальная переменная существует до тех пор, пока существует среда исполнения скрипта и доступна любому Lua-коду, выполняемому в этой среде.
При необходимости удалить глобальную переменную можно явным образом, просто присвоив ей значение nil.
g = 1 -- создаем глобальную переменную g со значением 1
...
g = nil -- удаляем глобальную переменную g
MsgBox(tostring (g)) --> nil
Все глобальные переменные являются полями обычной таблицы, называемой глобальным окружением. Эта таблица доступна через глобальную переменную _G. Поскольку полями глобального окружения являются все глобальные переменные (включая саму _G), то _G._G == _G.
Локальные переменные Lua
Любые локальные переменные должны быть объявлены явно с использованием ключевого слова local. Объявить локальную переменную можно в любом месте скрипта. Объявление может включать в себя присваивание переменной начального значения. Если значение не присвоено, переменная содержит nil.
local a -- объявляем локальную переменную a
local b = 1 -- объявляем локальную переменную b, присваиваем ей значение 1
local c, d = 2, 3 -- объявляем локальные переменные c и d, присваиваем им значения 2 и 3
Область видимости локальной переменной начинается после объявления и продолжается до конца блока.

Примечание

  • Областью видимости переменной называется участок кода программы, в пределах которого можно получить доступ к значению, хранящемуся в данной переменной.

Под блоком понимается:

  • тело управляющей конструкции (if-then, else, for, while, repeat);
  • тело функции;
  • фрагмент кода, заключённый в ключевые слова do...end.

Если локальная переменная определена вне какого-либо блока, её область видимости распространяется до конца скрипта.

a = 5 -- глобальная переменная a
local i = 1  -- переменная i локальна в пределах скрипта
   while i <= a do -- цикл от 1 до 5
   local a = i^2 -- переменная а локальна внутри цикла while
   MsgBox(a) --> 1, 4, 9, 16, 25
   i = i + 1
end
MsgBox(a) --> 5 (здесь обращение к глобальной a)
if i > 5 then
   local a -- переменная а локальна внутри then
   a = 10
   MsgBox(a) --> 10
else
   MsgBox(a) --> 5 (здесь обращение к глобальной a)
end
do
   local a = 20 -- переменная а локальна внутри do-end
   MsgBox(a) --> 20
end
MsgBox(a) --> 5 (здесь обращение к глобальной a)

Обратите внимание

  • Когда возможно, рекомендуется использовать локальные переменные вместо глобальных. Это позволит избежать «засорения» глобального пространства имён и обеспечит лучшую производительность (поскольку доступ к локальным переменным в Lua выполняется несколько быстрее, чем к глобальным).