Lua — различия между версиями
Evereskun (обсуждение | вклад) (→Доступные библиотеки) |
Evereskun (обсуждение | вклад) (→Доступные библиотеки) |
||
Строка 39: | Строка 39: | ||
В базовую библиотеку входят следующие функции: | В базовую библиотеку входят следующие функции: | ||
− | *'''assert''' - Генерирует ошибку с необязательным сообщением об ошибке, если значение первого аргумента false или nil. | + | *'''assert (v [, message])''' - Генерирует ошибку с необязательным сообщением об ошибке, если значение первого аргумента false или nil. |
− | *'''collectgarbage''' - Обеспечивает интерфейс к сборщику мусора. Первый аргумент определяет выполняемое действие (остановка, запуск сборщика мусора, выполнение сборки мусора и др.). | + | *'''collectgarbage ([opt [, arg]])''' - Обеспечивает интерфейс к сборщику мусора. Первый аргумент определяет выполняемое действие (остановка, запуск сборщика мусора, выполнение сборки мусора и др.). |
− | *'''error''' - Завершает выполнение последней функции, вызванной в защищённом режиме, с заданным сообщением об ошибке. | + | *'''error (message [, level])''' - Завершает выполнение последней функции, вызванной в защищённом режиме, с заданным сообщением об ошибке. |
*'''getfenv''' - Возвращает таблицу контекста заданной функции. Аргумент, определяющий функцию, может быть как, собственно, Lua-функцией, так и числом, определяющим уровень стека, на котором расположена функция. Если он равен 0, возвращается глобальный контекст. | *'''getfenv''' - Возвращает таблицу контекста заданной функции. Аргумент, определяющий функцию, может быть как, собственно, Lua-функцией, так и числом, определяющим уровень стека, на котором расположена функция. Если он равен 0, возвращается глобальный контекст. | ||
− | *'''getmetatable''' - Если объект не имеет метатаблицы, возвращает nil. Иначе, если в метатаблице есть поле __metatable, возвращает значение этого поля. В противном случае возвращает метатаблицу объекта. | + | *'''getmetatable (object)''' - Если объект не имеет метатаблицы, возвращает nil. Иначе, если в метатаблице есть поле __metatable, возвращает значение этого поля. В противном случае возвращает метатаблицу объекта. |
− | *'''ipairs''' - Возвращает итератор, таблицу и 0. Возвращаемый итератор проходит таблицу по целочисленным индексам от значения 1 до первого индекса со значением nil. Итератор возвращает текущий индекс и соответствующее ему значение. | + | *'''ipairs (t)''' - Возвращает итератор, таблицу и 0. Возвращаемый итератор проходит таблицу по целочисленным индексам от значения 1 до первого индекса со значением nil. Итератор возвращает текущий индекс и соответствующее ему значение. |
− | *'''next''' - Возвращает следующий (после заданного) индекс в таблице и соответствующее ему значение. Позволяет последовательно получить все поля таблицы. | + | *'''next (table [, index])''' - Возвращает следующий (после заданного) индекс в таблице и соответствующее ему значение. Позволяет последовательно получить все поля таблицы. |
− | *'''pairs''' - Возвращает итератор next(), таблицу и nil. Возвращаемый итератор проходит таблицу по всем значениям индекса. Итератор возвращает текущий индекс и соответствующее ему значение. | + | *'''pairs (t)''' - Возвращает итератор next(), таблицу и nil. Возвращаемый итератор проходит таблицу по всем значениям индекса. Итератор возвращает текущий индекс и соответствующее ему значение. |
− | *'''pcall''' - Вызывает заданную функцию с аргументами в защищённом режиме. Возвращает статус успешности выполнения. | + | *'''pcall (f [, arg1, ···])''' - Вызывает заданную функцию с аргументами в защищённом режиме. Возвращает статус успешности выполнения. |
− | *'''rawequal''' - Сравнивает два объекта, без вызова каких-либо метаметодов. Возвращает значение типа boolean. | + | *'''rawequal (v1, v2)''' - Сравнивает два объекта, без вызова каких-либо метаметодов. Возвращает значение типа boolean. |
− | *'''rawget''' - Возвращает реальное значение с заданным индексом из таблицы, без вызова каких-либо метаметодов. | + | *'''rawget (table, index)''' - Возвращает реальное значение с заданным индексом из таблицы, без вызова каких-либо метаметодов. |
− | *'''rawset''' - Помещает значение в поле таблицы с заданным индексом, без вызова каких-либо метаметодов. | + | *'''rawset (table, index, value)''' - Помещает значение в поле таблицы с заданным индексом, без вызова каких-либо метаметодов. |
− | *'''select''' - Если первый аргумент функции имеет числовое значение, возвращаются все аргументы, следующие за аргументом с этим номером. Если первый аргумент — строка ’#’, возвращается общее число полученных аргументов. | + | *'''select (index, ···)''' - Если первый аргумент функции имеет числовое значение, возвращаются все аргументы, следующие за аргументом с этим номером. Если первый аргумент — строка ’#’, возвращается общее число полученных аргументов. |
*'''setfenv''' - Устанавливает таблицу в качестве контекста для заданной функции. Аргумент, задающий функцию, может быть числом, определяющим положение функции на стеке вызовов. Если он равен 0, устанавливается глобальный контекст текущего потока. | *'''setfenv''' - Устанавливает таблицу в качестве контекста для заданной функции. Аргумент, задающий функцию, может быть числом, определяющим положение функции на стеке вызовов. Если он равен 0, устанавливается глобальный контекст текущего потока. | ||
− | *'''setmetatable''' - Устанавливает (удаляет) метатаблицу для данной таблицы. Если метатаблица содержит поле __metatable, генерирует ошибку. | + | *'''setmetatable (table, metatable)''' - Устанавливает (удаляет) метатаблицу для данной таблицы. Если метатаблица содержит поле __metatable, генерирует ошибку. |
− | *'''tonumber''' - Пытается конвертировать аргумент в число. Если конвертирование не удаётся, возвращает nil. | + | *'''tonumber (e [, base])''' - Пытается конвертировать аргумент в число. Если конвертирование не удаётся, возвращает nil. |
− | *'''tostring''' - Преобразует аргумент любого типа в строку. | + | *'''tostring (v)''' - Преобразует аргумент любого типа в строку. |
− | *'''type''' - Возвращает тип аргумента в виде строки. | + | *'''type (v)''' - Возвращает тип аргумента в виде строки. |
*'''unpack''' - Возвращает элементы из заданной таблицы. | *'''unpack''' - Возвращает элементы из заданной таблицы. | ||
− | *'''xpcall''' Вызывает заданную функцию в защищённом режиме. В отличие от pcall, позволяет установить обработчик ошибок. Не поддерживает передачу аргументов в функцию. | + | *'''xpcall (f, msgh [, arg1, ···])''' Вызывает заданную функцию в защищённом режиме. В отличие от pcall, позволяет установить обработчик ошибок. Не поддерживает передачу аргументов в функцию. |
'''2. Библиотека для работы со строками Lua (String Manipulation)''' | '''2. Библиотека для работы со строками Lua (String Manipulation)''' | ||
Строка 84: | Строка 84: | ||
string.имя_функции(...) | string.имя_функции(...) | ||
− | *'''len''' - Возвращает длину строки. | + | *'''string.len (s)''' - Возвращает длину строки. |
− | *'''rep''' - Возвращает строку, содержащую указанное число копий исходной строки. | + | *'''string.rep (s, n [, sep])''' - Возвращает строку, содержащую указанное число копий исходной строки. |
− | *'''lower''' - Заменяет все прописные буквы в строке на строчные. | + | *'''string.lower (s)''' - Заменяет все прописные буквы в строке на строчные. |
− | *'''upper''' - Заменяет в строке все строчные буквы на прописные. | + | *'''string.upper (s)''' - Заменяет в строке все строчные буквы на прописные. |
− | *'''reverse''' - Возвращает строку, в которой символы исходной строки расположены в обратном порядке. | + | *'''string.reverse (s)''' - Возвращает строку, в которой символы исходной строки расположены в обратном порядке. |
− | *'''format''' - Генерирует строку по форматной строке и аргументам по правилам, принятым в языке C. | + | *'''string.format (formatstring, ···)''' - Генерирует строку по форматной строке и аргументам по правилам, принятым в языке C. |
− | *'''byte''' - Возвращает числовые коды символов строки. | + | *'''string.byte (s [, i [, j]])''' - Возвращает числовые коды символов строки. |
− | *'''char''' - Преобразует набор числовых кодов символов в строку. | + | *'''string.char (···)''' - Преобразует набор числовых кодов символов в строку. |
− | *'''find''' - Выполняет поиск в строке первого вхождения подстроки, соответствующей заданному шаблону. Возвращает индексы начального и конечного символов найденной подстроки. | + | *'''string.find (s, pattern [, init [, plain]])''' - Выполняет поиск в строке первого вхождения подстроки, соответствующей заданному шаблону. Возвращает индексы начального и конечного символов найденной подстроки. |
− | *'''match''' - Выполняет поиск в строке первого вхождения подстроки, соответствующей заданному шаблону. Возвращает найденную подстроку. | + | *'''string.match (s, pattern [, init])''' - Выполняет поиск в строке первого вхождения подстроки, соответствующей заданному шаблону. Возвращает найденную подстроку. |
− | *'''gmatch''' - Возвращает итератор, который на каждой итерации возвращает подстроку, соответствующую заданному шаблону. | + | *'''string.gmatch (s, pattern)''' - Возвращает итератор, который на каждой итерации возвращает подстроку, соответствующую заданному шаблону. |
− | *'''sub''' - Возвращает подстроку исходной строки. | + | *'''string.sub (s, i [, j])''' - Возвращает подстроку исходной строки. |
− | *'''gsub''' - Возвращает копию исходной строки, в которой все вхождения шаблона заменены на строку, заданную третьим аргументом. Этот аргумент может быть строкой, таблицей или функцией. | + | *'''string.gsub (s, pattern, repl [, n])''' - Возвращает копию исходной строки, в которой все вхождения шаблона заменены на строку, заданную третьим аргументом. Этот аргумент может быть строкой, таблицей или функцией. |
− | *'''dump''' - Возвращает строку, содержащую двоичное представление функции Lua с заданным именем. | + | *'''string.dump (function [, strip])''' - Возвращает строку, содержащую двоичное представление функции Lua с заданным именем. |
'''3. Библиотека для работы с таблицами Lua (Table Manipulation)''' | '''3. Библиотека для работы с таблицами Lua (Table Manipulation)''' | ||
Строка 117: | Строка 117: | ||
table.имя_функции(...) | table.имя_функции(...) | ||
− | *'''insert''' - Вставляет элемент в заданную позицию таблицы, сдвигая остальные элементы таблицы вправо. | + | *'''table.insert (list, [pos,] value)''' - Вставляет элемент в заданную позицию таблицы, сдвигая остальные элементы таблицы вправо. |
− | *'''remove''' - Удаляет заданный элемент таблицы, сдвигая остальные элементы влево. Возвращает значение удалённого элемента. | + | *'''table.remove (list [, pos])''' - Удаляет заданный элемент таблицы, сдвигая остальные элементы влево. Возвращает значение удалённого элемента. |
− | *'''sort''' - Сортирует элементы таблицы в заданном порядке. Вторым аргументом может быть задана функция, которая будет использована вместо стандартного оператора «<» для сравнения элементов в процессе сортировки. | + | *'''table.sort (list [, comp])''' - Сортирует элементы таблицы в заданном порядке. Вторым аргументом может быть задана функция, которая будет использована вместо стандартного оператора «<» для сравнения элементов в процессе сортировки. |
− | *'''concat''' - Выполняет склейку указанных элементов массива через заданный разделитель. По умолчанию разделителем является пустая строка | + | *'''table.concat (list [, sep [, i [, j]]])''' - Выполняет склейку указанных элементов массива через заданный разделитель. По умолчанию разделителем является пустая строка. |
− | |||
− | |||
'''4. Математическая библиотека Lua (Mathematical Functions)''' | '''4. Математическая библиотека Lua (Mathematical Functions)''' | ||
Строка 132: | Строка 130: | ||
math.имя_функции(...) | math.имя_функции(...) | ||
− | *'''abs''' - Возвращает модуль числа. | + | *'''math.abs (x)''' - Возвращает модуль числа. |
− | *'''ceil''' - Возвращает наименьшее целое число, большее или равное заданному (выполняет округление «вверх»). | + | *'''math.ceil (x)''' - Возвращает наименьшее целое число, большее или равное заданному (выполняет округление «вверх»). |
− | *'''floor''' - Возвращает наибольшее целое число, меньшее или равное заданному (выполняет округление «вниз»). | + | *'''math.floor (x)''' - Возвращает наибольшее целое число, меньшее или равное заданному (выполняет округление «вниз»). |
− | *'''max''' - Возвращает максимальный из аргументов. | + | *'''math.max (x, ···)''' - Возвращает максимальный из аргументов. |
− | *'''min''' - Возвращает минимальный из аргументов. | + | *'''math.min (x, ···)''' - Возвращает минимальный из аргументов. |
− | *'''fmod''' - Возвращает остаток от деления одного числа на другое. | + | *'''math.fmod (x, y)''' - Возвращает остаток от деления одного числа на другое. |
− | *'''modf''' - Возвращает целую и дробную части исходного числа. | + | *'''math.modf (x)''' - Возвращает целую и дробную части исходного числа. |
*'''frexp''' - Возвращает нормализованную мантиссу и показатель аргумента. | *'''frexp''' - Возвращает нормализованную мантиссу и показатель аргумента. | ||
Строка 152: | Строка 150: | ||
*'''pow''' - Возводит число в степень. Вместо вызова функции возможно использование выражения вида x^y. | *'''pow''' - Возводит число в степень. Вместо вызова функции возможно использование выражения вида x^y. | ||
− | *'''sqrt''' - Вычисляет квадратный корень числа. Вместо вызова функции возможно использование выражения вида x^0.5. | + | *'''math.sqrt (x)''' - Вычисляет квадратный корень числа. Вместо вызова функции возможно использование выражения вида x^0.5. |
− | *'''exp''' - Возвращает ex. | + | *'''math.exp (x)''' - Возвращает ex. |
− | *'''log''' - Вычисляет натуральный логарифм. | + | *'''math.log (x [, base])''' - Вычисляет натуральный логарифм. |
*'''log10''' - Вычисляет логарифм по основанию 10. | *'''log10''' - Вычисляет логарифм по основанию 10. | ||
− | *'''cos''' - Вычисляет косинус угла, заданного в радианах. | + | *'''math.cos (x)''' - Вычисляет косинус угла, заданного в радианах. |
− | *'''sin''' - Вычисляет синус угла, заданного в радианах. | + | *'''math.sin (x)''' - Вычисляет синус угла, заданного в радианах. |
− | *'''tan''' - Вычисляет тангенс угла, заданного в радианах. | + | *'''math.tan (x)''' - Вычисляет тангенс угла, заданного в радианах. |
*'''cosh''' - Вычисляет гиперболический косинус. | *'''cosh''' - Вычисляет гиперболический косинус. | ||
Строка 172: | Строка 170: | ||
*'''tanh''' - Вычисляет гиперболический тангенс. | *'''tanh''' - Вычисляет гиперболический тангенс. | ||
− | *'''acos''' - Вычисляет арккосинус (в радианах). | + | *'''math.acos (x)''' - Вычисляет арккосинус (в радианах). |
− | *'''asin''' - Вычисляет арксинус (в радианах). | + | *'''math.asin (x)''' - Вычисляет арксинус (в радианах). |
− | *'''atan''' - Вычисляет арктангенс (в радианах). | + | *'''math.atan (y [, x])''' - Вычисляет арктангенс (в радианах). |
*'''atan2''' - Возвращает арктангенс x/y (в радианах), но использует знаки обоих параметров для вычисления «четверти» на плоскости. Также корректно обрабатывает случай когда y равен нулю. | *'''atan2''' - Возвращает арктангенс x/y (в радианах), но использует знаки обоих параметров для вычисления «четверти» на плоскости. Также корректно обрабатывает случай когда y равен нулю. | ||
− | *'''deg''' - Переводит величину угла из радиан в градусы. | + | *'''math.deg (x)''' - Переводит величину угла из радиан в градусы. |
− | *'''rad''' - Переводит величину угла из градусов в радианы. | + | *'''math.rad (x)''' - Переводит величину угла из градусов в радианы. |
− | *'''random''' - Функция, вызванная без аргументов, возвращает псевдослучайное число из интервала [0, 1). Эта же функция, вызванная с аргументом n, возвращает целое псевдослучайное число из интервала [1, n]. Эта же функция, вызванная с двумя аргументами l, u возвращает целое псевдослучайное число из интервала [l, u]. | + | *'''math.random ([m [, n]])''' - Функция, вызванная без аргументов, возвращает псевдослучайное число из интервала [0, 1). Эта же функция, вызванная с аргументом n, возвращает целое псевдослучайное число из интервала [1, n]. Эта же функция, вызванная с двумя аргументами l, u возвращает целое псевдослучайное число из интервала [l, u]. |
− | *'''randomseed''' - Устанавливает стартовое число генератора псевдослучайных чисел. | + | *'''math.randomseed (x)''' - Устанавливает стартовое число генератора псевдослучайных чисел. |
'''5. Библиотека для доступа к средствам операционной системы в Lua (Operating System Facilities)''' | '''5. Библиотека для доступа к средствам операционной системы в Lua (Operating System Facilities)''' | ||
Строка 193: | Строка 191: | ||
os.имя_функции(...). Можно использовать при форматировании времени. | os.имя_функции(...). Можно использовать при форматировании времени. | ||
− | *'''date''' - Возвращает строку или таблицу, содержащую дату и время, отформатированные в соответствии с заданными параметрами. При вызове функции без параметров, возвращает текущий файл ввода по умолчанию. В случае ошибок, данная функция возбуждает ошибку вместо того, чтобы возвратить код ошибки. | + | *'''os.date ([format [, time]])''' - Возвращает строку или таблицу, содержащую дату и время, отформатированные в соответствии с заданными параметрами. При вызове функции без параметров, возвращает текущий файл ввода по умолчанию. В случае ошибок, данная функция возбуждает ошибку вместо того, чтобы возвратить код ошибки. |
− | *'''difftime''' - Возвращает число секунд, прошедшее от времени t1 до времени t2. | + | *'''os.difftime (t2, t1)''' - Возвращает число секунд, прошедшее от времени t1 до времени t2. |
− | *'''time''' - Возвращает текущее время при вызове без аргументов, или время и дату, указанные в передаваемой таблице. Эта таблица должна иметь поля year, month, и day, и может иметь поля hour, min, sec, и isdst. | + | *'''os.time ([table])''' - Возвращает текущее время при вызове без аргументов, или время и дату, указанные в передаваемой таблице. Эта таблица должна иметь поля year, month, и day, и может иметь поля hour, min, sec, и isdst. |
'''6. The Debug Library''' | '''6. The Debug Library''' |
Версия 14:24, 15 февраля 2016
Lua - скриптовый язык программирования.
Введение
Lua - динамически типизированный язык, предназначенный для использования в качестве расширения или в качестве скриптового языка, и при этом достаточно компактный, чтобы поместиться на различных исполняющих платформах. Он поддерживает небольшое количество структур данных, такие как логические значения, числа (по умолчанию — двойной точности с плавающей точкой), а также строки.
Используется для удобства вычислений и увеличения скорости исполнения кода.
Создание скрипта
В машине состояний, выбрав добавляемое свойство, создаем или открываем уже существующий скрипт (edit script):
Основные функции
При создании скриптов в первой вкладке всегда создается файл viewer.lua, где перечислен список доступных функций и параметров.
Существует четыре вида функций для взаимодействия скрипта с машиной состояний:
Добавлены функции (вытягивание данных из текстовой базы):
viewer.getResFromTxtDB(txtID,tp,defValue)
viewer.getStrFromTxtDB(txtID,sense,defValue)
С их помощью можно вытянуть иконку из текстовой базы и вытянуть текст по текущей локализации.
Доступные библиотеки
1. Базовая библиотека стандартных функций Lua (Basic Functions)
Функции базовой библиотеки Lua размещаются в глобальном контексте.
В базовую библиотеку входят следующие функции:
- assert (v [, message]) - Генерирует ошибку с необязательным сообщением об ошибке, если значение первого аргумента false или nil.
- collectgarbage ([opt [, arg]]) - Обеспечивает интерфейс к сборщику мусора. Первый аргумент определяет выполняемое действие (остановка, запуск сборщика мусора, выполнение сборки мусора и др.).
- error (message [, level]) - Завершает выполнение последней функции, вызванной в защищённом режиме, с заданным сообщением об ошибке.
- getfenv - Возвращает таблицу контекста заданной функции. Аргумент, определяющий функцию, может быть как, собственно, Lua-функцией, так и числом, определяющим уровень стека, на котором расположена функция. Если он равен 0, возвращается глобальный контекст.
- getmetatable (object) - Если объект не имеет метатаблицы, возвращает nil. Иначе, если в метатаблице есть поле __metatable, возвращает значение этого поля. В противном случае возвращает метатаблицу объекта.
- ipairs (t) - Возвращает итератор, таблицу и 0. Возвращаемый итератор проходит таблицу по целочисленным индексам от значения 1 до первого индекса со значением nil. Итератор возвращает текущий индекс и соответствующее ему значение.
- next (table [, index]) - Возвращает следующий (после заданного) индекс в таблице и соответствующее ему значение. Позволяет последовательно получить все поля таблицы.
- pairs (t) - Возвращает итератор next(), таблицу и nil. Возвращаемый итератор проходит таблицу по всем значениям индекса. Итератор возвращает текущий индекс и соответствующее ему значение.
- pcall (f [, arg1, ···]) - Вызывает заданную функцию с аргументами в защищённом режиме. Возвращает статус успешности выполнения.
- rawequal (v1, v2) - Сравнивает два объекта, без вызова каких-либо метаметодов. Возвращает значение типа boolean.
- rawget (table, index) - Возвращает реальное значение с заданным индексом из таблицы, без вызова каких-либо метаметодов.
- rawset (table, index, value) - Помещает значение в поле таблицы с заданным индексом, без вызова каких-либо метаметодов.
- select (index, ···) - Если первый аргумент функции имеет числовое значение, возвращаются все аргументы, следующие за аргументом с этим номером. Если первый аргумент — строка ’#’, возвращается общее число полученных аргументов.
- setfenv - Устанавливает таблицу в качестве контекста для заданной функции. Аргумент, задающий функцию, может быть числом, определяющим положение функции на стеке вызовов. Если он равен 0, устанавливается глобальный контекст текущего потока.
- setmetatable (table, metatable) - Устанавливает (удаляет) метатаблицу для данной таблицы. Если метатаблица содержит поле __metatable, генерирует ошибку.
- tonumber (e [, base]) - Пытается конвертировать аргумент в число. Если конвертирование не удаётся, возвращает nil.
- tostring (v) - Преобразует аргумент любого типа в строку.
- type (v) - Возвращает тип аргумента в виде строки.
- unpack - Возвращает элементы из заданной таблицы.
- xpcall (f, msgh [, arg1, ···]) Вызывает заданную функцию в защищённом режиме. В отличие от pcall, позволяет установить обработчик ошибок. Не поддерживает передачу аргументов в функцию.
2. Библиотека для работы со строками Lua (String Manipulation)
Все функции для работы со строками собраны в таблице string. Поэтому для вызова функций используется запись вида: string.имя_функции(...)
- string.len (s) - Возвращает длину строки.
- string.rep (s, n [, sep]) - Возвращает строку, содержащую указанное число копий исходной строки.
- string.lower (s) - Заменяет все прописные буквы в строке на строчные.
- string.upper (s) - Заменяет в строке все строчные буквы на прописные.
- string.reverse (s) - Возвращает строку, в которой символы исходной строки расположены в обратном порядке.
- string.format (formatstring, ···) - Генерирует строку по форматной строке и аргументам по правилам, принятым в языке C.
- string.byte (s [, i [, j]]) - Возвращает числовые коды символов строки.
- string.char (···) - Преобразует набор числовых кодов символов в строку.
- string.find (s, pattern [, init [, plain]]) - Выполняет поиск в строке первого вхождения подстроки, соответствующей заданному шаблону. Возвращает индексы начального и конечного символов найденной подстроки.
- string.match (s, pattern [, init]) - Выполняет поиск в строке первого вхождения подстроки, соответствующей заданному шаблону. Возвращает найденную подстроку.
- string.gmatch (s, pattern) - Возвращает итератор, который на каждой итерации возвращает подстроку, соответствующую заданному шаблону.
- string.sub (s, i [, j]) - Возвращает подстроку исходной строки.
- string.gsub (s, pattern, repl [, n]) - Возвращает копию исходной строки, в которой все вхождения шаблона заменены на строку, заданную третьим аргументом. Этот аргумент может быть строкой, таблицей или функцией.
- string.dump (function [, strip]) - Возвращает строку, содержащую двоичное представление функции Lua с заданным именем.
3. Библиотека для работы с таблицами Lua (Table Manipulation)
Все функции для работы с таблицами собраны в таблице table. Для вызова функций используется запись вида: table.имя_функции(...)
- table.insert (list, [pos,] value) - Вставляет элемент в заданную позицию таблицы, сдвигая остальные элементы таблицы вправо.
- table.remove (list [, pos]) - Удаляет заданный элемент таблицы, сдвигая остальные элементы влево. Возвращает значение удалённого элемента.
- table.sort (list [, comp]) - Сортирует элементы таблицы в заданном порядке. Вторым аргументом может быть задана функция, которая будет использована вместо стандартного оператора «<» для сравнения элементов в процессе сортировки.
- table.concat (list [, sep [, i [, j]]]) - Выполняет склейку указанных элементов массива через заданный разделитель. По умолчанию разделителем является пустая строка.
4. Математическая библиотека Lua (Mathematical Functions)
Математические функции собраны в таблице math. Для вызова функций используется запись вида: math.имя_функции(...)
- math.abs (x) - Возвращает модуль числа.
- math.ceil (x) - Возвращает наименьшее целое число, большее или равное заданному (выполняет округление «вверх»).
- math.floor (x) - Возвращает наибольшее целое число, меньшее или равное заданному (выполняет округление «вниз»).
- math.max (x, ···) - Возвращает максимальный из аргументов.
- math.min (x, ···) - Возвращает минимальный из аргументов.
- math.fmod (x, y) - Возвращает остаток от деления одного числа на другое.
- math.modf (x) - Возвращает целую и дробную части исходного числа.
- frexp - Возвращает нормализованную мантиссу и показатель аргумента.
- ldexp - Строит число по мантиссе и показателю.
- pow - Возводит число в степень. Вместо вызова функции возможно использование выражения вида x^y.
- math.sqrt (x) - Вычисляет квадратный корень числа. Вместо вызова функции возможно использование выражения вида x^0.5.
- math.exp (x) - Возвращает ex.
- math.log (x [, base]) - Вычисляет натуральный логарифм.
- log10 - Вычисляет логарифм по основанию 10.
- math.cos (x) - Вычисляет косинус угла, заданного в радианах.
- math.sin (x) - Вычисляет синус угла, заданного в радианах.
- math.tan (x) - Вычисляет тангенс угла, заданного в радианах.
- cosh - Вычисляет гиперболический косинус.
- sinh - Вычисляет гиперболический синус.
- tanh - Вычисляет гиперболический тангенс.
- math.acos (x) - Вычисляет арккосинус (в радианах).
- math.asin (x) - Вычисляет арксинус (в радианах).
- math.atan (y [, x]) - Вычисляет арктангенс (в радианах).
- atan2 - Возвращает арктангенс x/y (в радианах), но использует знаки обоих параметров для вычисления «четверти» на плоскости. Также корректно обрабатывает случай когда y равен нулю.
- math.deg (x) - Переводит величину угла из радиан в градусы.
- math.rad (x) - Переводит величину угла из градусов в радианы.
- math.random ([m [, n]]) - Функция, вызванная без аргументов, возвращает псевдослучайное число из интервала [0, 1). Эта же функция, вызванная с аргументом n, возвращает целое псевдослучайное число из интервала [1, n]. Эта же функция, вызванная с двумя аргументами l, u возвращает целое псевдослучайное число из интервала [l, u].
- math.randomseed (x) - Устанавливает стартовое число генератора псевдослучайных чисел.
5. Библиотека для доступа к средствам операционной системы в Lua (Operating System Facilities)
Функции, обеспечивающие доступ к средствам операционной системы, собраны в таблице os. Для вызова функций используется запись вида: os.имя_функции(...). Можно использовать при форматировании времени.
- os.date ([format [, time]]) - Возвращает строку или таблицу, содержащую дату и время, отформатированные в соответствии с заданными параметрами. При вызове функции без параметров, возвращает текущий файл ввода по умолчанию. В случае ошибок, данная функция возбуждает ошибку вместо того, чтобы возвратить код ошибки.
- os.difftime (t2, t1) - Возвращает число секунд, прошедшее от времени t1 до времени t2.
- os.time ([table]) - Возвращает текущее время при вызове без аргументов, или время и дату, указанные в передаваемой таблице. Эта таблица должна иметь поля year, month, и day, и может иметь поля hour, min, sec, и isdst.
6. The Debug Library
Эта библиотека обеспечивает отладку программам Lua.
- debug.debug () - Переходит в интерактивный режим, выполняя все команды, которые вводит пользователь. Используя простые команды и другие средства отладки, пользователь может получать значения глобальных и локальных переменных, изменять их значения, получать значения выражений, и т.д. Строка, содержащая только слово cont, завершает выполнение функции, т.о. вызвавшая программа продолжает выполнение. Команды для функции debug.debug лексически не вложены ни в какую функцию, т.о. не имеют прямого доступа к локальным переменным.
- debug.gethook ([thread]) - Возвращает текущие настройки перехвата (hook settings) нити (thread), как три значения: текущая функция перехвата, текущая маска перехвата, и текущее количество перехватов (hook count) (в соответствии с параметрами, установленными функцией debug.sethook).
- debug.getinfo ([thread,] f [, what]) - Возвращает таблицу с информацией о функции. Вы можете задать функцию непосредственно, или вы можете задать номер функции, который соответствует функции, запущенной на уровне function стека вызововзаданной нити: уровень 0 соответствует текущей функции (getinfo непосредственно); уровень 1 – это функция, которая вызвала getinfo; и т.д. Если в параметре function задано число, большее, чем количество запущенных функций, то getinfo возвращает nil.
- debug.getlocal ([thread,] f, local) - Данная функция возвращает имя и значение локальной переменной с индексом local функции на уровне level стека. (Первая локальная переменная функции имеет индекс 1, и т.д., вплоть до последней локальной переменной.)
- debug.getmetatable (value) - Возвращает метатаблицу заданного объекта object или nil если объект не имеет метатаблицы.
- debug.getregistry () - Возвращает таблицу реестра (регистра???) (registry table)
- debug.getupvalue (f, up) - Данная функция возвращает имя и значение внешней локальной переменной (upvalue) с индексом up функции func. Функция возвращает nil если не существует внешней локальной переменной (upvalue) с заданным индексом.
- debug.getuservalue (u) - Возвращает значение, связанное с (u). Если (u) - это не пользовательские данные, возвращает ноль.
- debug.sethook ([thread,] hook, mask [, count]) - Делает данную функцию функцией перехвата (hook).
- debug.setlocal ([thread,] level, local, value) - Эта функция присваивает значение value локальной переменной с индексом local функции на уровне level стека. Функция возвращает nil, если не существует переменной с данным индексом, и возбуждает ошибку при вызове с уровнем level, выходящем за границы стека.
- debug.setmetatable (value, table) - Изменяет метатаблицу заданного объекта object на таблицу table (которая также может быть nil).
- debug.setupvalue (f, up, value) - Данная функция присваивает значение value локальной внешней переменной (upvalue) с индексом up функции func. Функция возвращает nil, если не существует локальной внешней переменной (upvalue) с данным индексом. В противном случае, возвращает имя локальной внешней переменной (upvalue).
- debug.setuservalue (udata, value) -
- debug.traceback ([thread,] [message [, level]]) - Возвращает строку со следом (traceback) стека вызовов. Опциональный параметр message добавляется в начало следа. Опциональный параметр level – число, обозначающее уровень, с которого необходимо начинать след (traceback) (значение по умолчанию равно 1, т.е. соответствует функции, вызывающей traceback).
- debug.upvalueid (f, n) -
- debug.upvaluejoin (f1, n1, f2, n2) -
Отладка
print(e1, e2, ...) Печатает значения аргументов. В конце выводится перевод строки. Эта функция не предназначена для форматного вывода, а только для быстрого (отладочного) вывода значений переменных.
В app.icf при установке
[GameTrace]
Level="Verbose"
В логе у нас появятся данные из скриптов со всеми операциями:
D/IScript IScript::callScriptMethod() callScriptMethod: "lottery_scpt:init"
D/IScript viewer_getResFromTxtDB() viewer.getResFromTxtDB(5670,0,666)->666
ID("control") - функция, которая возвращает ID объекта с именем "control" - сделано для удобства переноса скриптов из одного проекта в другой, не подвязываясь к ID объекта. НО, при импорте скрипта в другой проект важно проверять наличие объектов с таким же именем. Их быть не должно! В противном случае при сохранении проекта в редакторе будет выдаваться ошибка
Пример использования
Рассмотрим пример использования скрипта для написания программы Калькулятор
Создаем машину состояний с именем "control", в ней создаем скрипт obj_control.lua. В функции init () объявляем переменные:
1. По тапу на кнопки 0-9 записываем машине соответствующий параметр и вызываем состояние pressedDigit:
При вызове состояния pressedDigit скрипт вызывает функцию pressedDigit():
Объявляем локальную переменную local digit, в которую будем записывать значение параметра pressed (записанное по тапу на кнопку).
2. Аналогично по тапу на кнопки операторов записываем параметр и вызываем функцию pressedOperator():
3. Вызов функции pressedRavnо(), вычисление и вывод результата:
Пример реализации
Литература
1. Официальный сайт Lua - http://www.lua.org/home.html
2. http://tylerneylon.com/a/learn-lua/
3. http://docs.madewithmarmalade.com/display/MD/Introduction+to+Lua
4. Программа - интерпретатор для работы со скриптами Lua - ZeroBrane Studio: http://studio.zerobrane.com/