В Qlua есть следующие типы переменных:
nil (неопределенный),
boolean (логический),
number (числовой),
string (строковый),
function (функция в Lua является типом данных),
а также, есть массивы (таблицы Lua), в т.ч. многомерные, которые могут содержать в себе все вышеперечисленные типы данных.
Для того, чтобы объявить переменную в Qlua, достаточно присвоить ей значение. Язык Qlua сам определит к какому типу отнести переменную.
Примеры:
A = true; -- Теперь переменная A имеет логический тип boolean -- в QLua(Lua) все значения являются TRUE, кроме nil и FALSE B = 1; C = 1.5; -- Переменные B и C имеют числовой тип number, который может содержать как целые числа, так и числа с дробной частью D = "Текст"; -- Переменная D имеет строковый тип string E = {}; -- Переменная E теперь является массивом нулевой длинны -- Массив в QLua может хранить внутри себя значения РАЗНЫХ! типов одновременно -- Так присваиваются значения элементам: E[1] = 10; -- ВАЖНО !!! Элементы массива в QLua, по умолчанию, индексируются, начиная с 1, а не с 0, -- хотя ключами(индексами) могут быть и отрицательные числа и слова и строки -- пример инициализации: F = {green = "Зеленый", [-10] = 30}; -- НЮАНС!!! G = {good year = 2015}; -- такая инициализация вызовет ошибку G["good year"] = 2015; -- а так ошибки не будет -- примеры добавления: F["apple"] = "Яблоко"; F[-20] = 12345; E[2] = "Текст"; -- МНОГОМЕРНЫЕ массивы создаются так же, как и одномерные, мерность зависит от количества вложенных фигурных скобок: A = {{{}}}; -- объявлен трехмерный массив A[1][1][1] = "Значение"; -- пример обращения к массиву -- Массивы в QLua являются таблицами, по-этому к ним можно применять функции из таблицы table языка lua: table.concat(Array, str, i, j) -- Выполняет конкатенацию элементов массива в одну строку и возвращает ее -- Array - это исходный массив, -- str (необязательный параметр) - строка, вставляемая между элементами -- i (необязательный параметр) - начальный индекс (по умолчанию, 1) -- j (необязательный параметр) - конечный индекс (по умолчанию, индекс последнего элемента массива) table.insert(Array, i, new_element) -- Вставляет элемент new_element в массив Array по индексу i, сдвигая существующие элементы -- i (необязательный параметр) - по умолчанию, новый элемент добавляется в конец массива, увеличивая его на 1 элемент table.maxn(Array); -- Возвращает максимальный положительный числовой индекс, если таковых нет, возвращает 0 table.remove(Array, i); -- Удаляет элемент таблицы по индексу i -- i (необязательный параметр) - по умолчанию, удаляется последний элемент массива table.sort(Array, func); -- Сортирует элементы массива, размещая их по определенному правилу -- func (необязательный параметр) - по умолчанию, функция сортирует элементы по возрастанию, применяя сравнение "<", -- но можно применить свой порядок, для этого, вторым параметром нужно передать функцию, принимающую 2 параметра, -- которая будет возвращать true, если параметр 1 меньше параметра 2. -- Пример: Arr = {2,4,3,1,5}; function MySort(a,b) if a > b then return true; else return false; end; end; table.sort(Arr); -- В результате в массиве Arr будет такой порядок {1,2,3,4,5} table.sort(Arr, MySort); -- В результате в массиве Arr будет такой порядок {5,4,3,2,1} -- Чтобы узнать количество элементов в массиве, применяется оператор "#" -- в предыдущем примере #Arr вернет 5, но есть один ВАЖНЫЙ МОМЕНТ!!!: Arr[2] = nil; -- теперь в массиве содержатся значения {5,3,2,1}, а индексы (1,3,4,5), т.е. индекс 2 отсутствует, -- сейчас #Arr вернет 1, т.к. элемент по индексу 2 не существует |
Все переменные, объявленные выше, являются ГЛОБАЛЬНЫМИ по типу видимости, т.е., объявив так переменную в одной функции, можно будет использовать ее значение в любой другой функции, находящейся в том же скрипте. Можно объявить переменную ЛОКАЛЬНОГО типа, использовать которую можно будет только внутри той функции, в которой Вы ее создали. Для этого перед именем переменной нужно поставить идентификатор local.
Примеры:
A = 1; -- ГЛОБАЛЬНАЯ, видна везде в скрипте local B = 2; -- ЛОКАЛЬНАЯ, но, так как объявлена в основном теле скрипта, а не внутри функции, видна везде в скрипте function F1() -- Здесь видны переменные A и B, можно как брать из них значения, так и изменять их C = 3; -- Объявлена ГЛОБАЛЬНАЯ переменная local D = 4; -- Объявлена ЛОКАЛЬНАЯ переменная local A = 5; -- Объявлена НОВАЯ ЛОКАЛЬНАЯ переменная, которая не изменила значение ранее объявленной переменной A end; function F2() -- Здесь видны переменные A(первая), B и C, можно как брать из них значения, так и изменять их -- Если обратиться здесь к переменной A, то увидим, что она, по-прежнему, равна 1 -- Переменная D здесь не видна end; |
Функции
-- Объявление: function Name(параметр1, параметр2,...) end; -- следующая запись эквивалентна: Name = function(параметр1, параметр2,...) end; -- Функция в QLua(Lua) может иметь входные параметры, а может и не иметь -- Параметры, это локальные для данной функции переменные, значения которых передаются при вызове функции -- Функция в QLua(Lua) может иметь переменное число параметров -- пример 1: function F1(a,b,...) end; -- Пример вызова: F1(1,2,3,4); -- Значение 1 присвоится переменной a -- Значение 2 присвоится переменной b -- Для оставшихся значений (3 и 4), существует встроенная переменная arg, у которой есть поле n, -- в которую заносится количество переданных дополнительных значений, в данном случае arg.n равно 2 -- Значение 3 присвоится переменной arg[1] -- Значение 4 присвоится переменной arg[2] -- пример 2: function F2(...) end; -- Пример вызова: F2(1,2,3); -- Значение 1 присвоится переменной arg[1] -- Значение 2 присвоится переменной arg[2] -- Значение 3 присвоится переменной arg[3] -- arg.n равно 3 -- Функции в QLua(Lua) могут не возвращать, или возвращать одно и более значений, -- для этого служит оператор return -- Пример: function F() return 1,2,3; end; -- Вызов 1: A = F(); -- A[1] получит значение 1 -- A[2] получит значение 2 -- A[3] получит значение 3 -- Вызов 2: A,B,C = F(); -- A получит значение 1 -- B получит значение 2 -- C получит значение 3 -- Вызов 3: _,_,A = F(); -- A получит значение 3 -- Символ "_" служит в QLua(Lua) для замены ненужных переменных |
QLua поддерживает параллельное присваивание:
-- Запись a,b,c = 1,2,3; -- эквивалентна записи a = 1; b = 2; c = 3; |
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!