Раздел: CronosPRO | Дата редакции: 10.07.2013 | id статьи: 1513 |
Типы данных Lua
Какие типы данных поддерживает язык Lua?
- Nil (ничего). Соответствует отсутствию у переменной значения. Этот тип представлен единственным значением — nil.
Boolean (логический). К данному типу относятся значения false (ложь) и true (истина).
При выполнении логических операций значение nil рассматривается как false. Все остальные значения, включая число 0 и пустую строку, рассматриваются как true.
Number (числовой). Служит для представления числовых значений.
В числовых константах можно указывать необязательную дробную часть и необязательный десятичный порядок, задаваемый символами «e» или «E». Целочисленные числовые константы можно задавать в шестнадцатеричной системе, используя префикс 0x.
Примеры допустимых числовых констант: 3, 3.0, 3.1415926, 314.16e-2, 0xff.
String (строковый). Служит для представления строк.
Строковые значения задаются в виде последовательности символов, заключённой в одинарные или двойные кавычки:
a = "это строка" b = 'это вторая строка'
Строки, заключённые в двойные кавычки, могут интерпретировать C-подобные управляющие последовательности (escape-последовательности), начинающиеся с символа «\» (обратный слэш):
- \b (пробел),
- \n (перевод строки),
- \r (возврат каретки);
- \t (горизонтальная табуляция),
- \\ (обратный слеш);
- \'' (двойная кавычка);
- \' (одинарная кавычка).
Обратите внимание
Символ в строке также может быть представлен своим кодом с помощью escape-последовательности:
\ddd,
где ddd — последовательность из не более чем трёх цифр.
Кроме кавычек для определения строки могут также использоваться двойные квадратные скобки:local a = [[Компания "Кронос"]]
Определение строки с помощью двойных квадратных скобок позволяет игнорировать все escape-последовательности, т. е. строка создаётся полностью так, как описана:local a = [[string string1 string2 string3 ]] -- "string string1 string2 string3"
Примечание
- При определении строки с помощью двойных квадратных скобок учитываются символы табуляции и переноса.
Двойные скобки могут быть вложенными. Для того чтобы их не перепутать, между скобками вставляется символ «равно» (=):local a = [=[определение строки [[string]] в Lua]=] -- будет срока: "определение строки [[string]] в Lua"
Function (функция). Функции в Lua могут быть записаны в переменные, переданы как параметры в другие функции и возвращены как результат выполнения функций.
Table (таблица). Таблица представляет собой набор пар «ключ» — «значение», которые называют полями или элементами таблицы. Как ключи, так и значения полей таблицы могут иметь любой тип, за исключением nil. Таблицы не имеют фиксированного размера: в любой момент времени в них можно добавить произвольное число элементов.
Userdata (пользовательские данные). Является особым типом данных. Значения этого типа не могут быть созданы или изменены непосредственно в Lua-скрипте.
Userdata используется для представления новых типов, созданных в вызывающей скрипт программе или в библиотеках, написанных на языке С. Например, библиотеки расширений Lua для «CronosPRO» используют этот тип для представления таких объектов, как:
- банки данных (класс Bank);
- базы данных (класс Base);
- записи (класс Record) и т. п.
- Thread (поток). Соответствует потоку выполнения. Эти потоки никаким образом не связаны с операционной системой и поддерживаются исключительно средствами самого Lua.
Как в Lua задать тип переменной?
a = 123 -- переменная a имеет тип number a = "123" -- теперь переменная a имеет тип string a = true -- теперь переменная a имеет тип boolean a = {} -- теперь переменная a имеет тип table
Обратите внимание
- Переменные типа table, function, thread и userdata не содержат самих данных, а хранят ссылки на соответствующие объекты. При присваивании, передачи в функцию в качестве аргумента и возвращении из функции в качестве результата копирования объектов не происходит, копируются только ссылки на них.
a = {} -- создаем таблицу. В переменную a помещается ссылка на таблицу b = a -- переменная b ссылается на ту же таблицу, что и a a[1] = 10 -- элементу таблицы с индексом 1 присвоено значение 10 MsgBox(b[1]) --> '10' b[1] = 20 MsgBox(a[1]) --> '20'
a = 10 b = a a = 20 MsgBox(a) --> '20' MsgBox(b) --> '10'
Как в Lua получить тип переменной?
t = type ("это строка") -- t равно "string" t = type (123) -- t равно "number" t = type (type) -- t равно "function" t = type (true) -- t равно "boolean" t = type (nil) -- t равно "nil" t = type (CroApp.GetBank()) -- t равно "userdata"
Как в Lua преобразовать тип переменной?
a = "10" + 2 -- a равно 12 a = "10" + 2 -- a равно "10 + 2" a = "-5.3e-10"*"2" -- a равно -1.06e-09 a = "строка" + 2 -- Ошибка! Невозможно преобразовать "строка" в число
a = tostring (10) -- a равно "10" a = tostring (true) -- a равно "true" a = tostring (nil) -- a равно "nil" a = tostring ({[1] = "это поле 1"}) -- a равно "table: 06DB1058"
a = render (10) -- a равно "10" a = render (true) -- a равно "true" a = render (nil) -- a равно "nil" a = render ({[1] = "это поле 1"}) -- a равно "{[1] = "это поле 1"}"
a = tonumber ("10") -- a равно "10" a = tonumber ("10"..".5") -- a равно 10.5 a = tonumber (true) -- a равно "nil" a = tonumber (nil) -- a равно "nil"