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