Для начала необходимо уяснить что lua - язык регистрозависимый, то есть функция game и Game это две РАЗНЫЕ функции. Так же как и переменные local C и local c разные переменные! Много ошибок бывает из-за небольшой опечатки, которые бывает трудно отследить!
Так же необходимо понимать что доступ к локальным переменным гораздо быстрее нежели чем к глобальным, т.к локальные переменные хранятся в той части оперативной памяти выделенной для этого скрипта, когда как глобальные хранятся в общей среде скриптом(общей среде lua). По этому что бы не было лишних подвисаний, используйте локальные переменные где это позволяет ситуация!
Обращение к любой не объявленной переменной выдаст nil(пустой указатель/пустота)!
Собственно, в lua существует два типа переменных - глобальные и локальные. Глобальные доступны ВСЕМ скриптам в данном игровом режиме, локальные доступны только определенному "блоку" скрипта.
Что подразумевает под собой блок? Это участок кода внутри функции/конструкции ветвления(if/else)/цикл. Например, рассмотрим небольшой пример участка кода с участием локальной переменной.
Перепишем чутка код.
Больше примеров богу примеров!
А теперь о глобальных переменных.
Все глобальные переменные и параметры хранятся в некой таблице глобальных параметров lua. Это таблица называется _G (global)
Все необъявленые ранее глобальные переменные имеют nil по умолчанию. Так же очевидно что при необходимости удалить переменную, нужно просто присвоить ей nil
Объявляется глобальная переменная очень просто, достаточно присвоить ей значение
И после, она будет доступна во всем скрипте, но в другие скриптах такое объявление может не работать. Для того что бы передавать переменные в разные скрипты( например между addon_game_mode.lua и custom_my_megascript.lua) Необходимо вручную занести ее в таблицу глобальных переменных(_G). Сделать это довольно просто
Все. Теперь переменная _G.temp будет доступна в любом скрипте данной среды(текущего игрового режима)
Собственно это все основы которые необходимо знать о переменных lua любому кто тыкает в lua палкой.
Собственно, полезные статьи о lua:
О работе с переменными в lua:http://www.cronos.ru/kb-1512.html
Вообще о lua(крайне рекомендую): https://zserge.wordpress.com/2012/02/23/lua-%D0%B7%D0%B0-60-%D0%BC%D0%B8%D0%BD%D1%83%D1%82/
Так же необходимо понимать что доступ к локальным переменным гораздо быстрее нежели чем к глобальным, т.к локальные переменные хранятся в той части оперативной памяти выделенной для этого скрипта, когда как глобальные хранятся в общей среде скриптом(общей среде lua). По этому что бы не было лишних подвисаний, используйте локальные переменные где это позволяет ситуация!
Обращение к любой не объявленной переменной выдаст nil(пустой указатель/пустота)!
Собственно, в lua существует два типа переменных - глобальные и локальные. Глобальные доступны ВСЕМ скриптам в данном игровом режиме, локальные доступны только определенному "блоку" скрипта.
Что подразумевает под собой блок? Это участок кода внутри функции/конструкции ветвления(if/else)/цикл. Например, рассмотрим небольшой пример участка кода с участием локальной переменной.
Код:
local a = 100
if a == 100 then
local b = 200
end
print(b) -- выдаст nil, т.к "b" существует ТОЛЬКО внутри блока if ... end
Код:
local a = 100
local b
if a == 100 then
local b = 200
end
print(b) -- выдаст 200, т.к переменная b объявлена в том же блоке где и выводится.
Больше примеров богу примеров!
Код:
local c
function Swap(a, b)
c = a
a = b
b = c
end
function Main() -- допустим что это у нас вызывается первой функцией(в игре это InitGameMode())
c = 50
local a = 60
local b = 30
Swap(a,b)
print(a,b,c) -- выдаст 30 60 60, т.к переменная c была объявлена в общем блоке, и дальше любая функция ее ПЕРЕЗАПИШЕТ!
end
А теперь о глобальных переменных.
Все глобальные переменные и параметры хранятся в некой таблице глобальных параметров lua. Это таблица называется _G (global)
Все необъявленые ранее глобальные переменные имеют nil по умолчанию. Так же очевидно что при необходимости удалить переменную, нужно просто присвоить ей nil
Объявляется глобальная переменная очень просто, достаточно присвоить ей значение
Код:
temp = 10
Код:
_G.temp = 10
Чутка наркомании от lua, в _G хранятся все переменные, в том числе и сама _G. Так что _G._G = _G (мозг улетел и обещал не возвращаться)
Собственно, полезные статьи о lua:
О работе с переменными в lua:http://www.cronos.ru/kb-1512.html
Вообще о lua(крайне рекомендую): https://zserge.wordpress.com/2012/02/23/lua-%D0%B7%D0%B0-60-%D0%BC%D0%B8%D0%BD%D1%83%D1%82/
Последнее редактирование модератором: