VoxelEngine/doc/ru/scripting/extensions.md

12 KiB
Raw Permalink Blame History

Расширения стандартных библиотек

В скрипте ядра stdmin.lua определены функции, расширяющие и дополняющие некоторые из стандартных библиотек Lua

Расширения для table

table.copy(t: table) -> table

Создаёт и возвращает копию переданной таблицы путём создания новой и копирования в неё всех элементов из переданной.

table.deep_copy(t: table) -> table

Функция глубокого копирования создает полную копию исходной таблицы, включая все её вложенные таблицы.

table.count_pairs(t: table) -> integer

Возвращает количество пар в переданной таблице.

table.random(t: table) -> object

Возвращает один элемент из переданной таблицы на случайной позиции.

table.has(t: table, x: object) -> bool

Возвращает true, если x содержится в t.

table.index(t: table, x: object) -> integer

Возвращает индекс обьекта x в t. Если переданный обьект не содержится в таблице, то функция вернёт значение -1.

table.remove_value(t: table, x: object)

Удаляет элемент x из t.

table.shuffle(t: table) -> table

Перемешивает значения в таблице.

table.merge(t1: table, t2: table) -> table

Добавляет в таблицу t1 значения из таблицы t2. Если в таблице t2 присутствует ключ из t1, то значение ключа не будет изменено.

table.map(t: table, func: function(indx, value) ) -> table

Проходится по таблице и применяет ко всем её элементам func, которая возвращает новое значение элемента.

table.filter(t: table, func: function(indx, value) ) -> table

Проходится по таблице с помощью func, которая возвращает true если элемент надо сохранить и false, если его надо удалить.

table.set_default(t: table, key: number | string, default: any) -> any | default

Позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод установит его со значением default и вернет его.

table.flat(t: table) -> table

Возвращает "плоскую" версию исходной таблицы.

table.deep_flat(t: table) -> table

Возвращает глубокую "плоскую" версию исходной таблицы.

table.sub(arr: table, start: number | nil, stop: number | nil) -> table

Возвращает обрезанную версию таблицы с индекса start до индекса stop включительно, при этом пары ключ-значение не сохраняются в новой таблице. При значениях nil начинает с 1 и заканчивает #arr соответственно.

table.insert_unique(t: table, val: any)
table.insert_unique(t: table, pos: number, val: any)

Добавляет значение в таблицу, только если его там не было.

table.tostring(t: table) -> string

Конвертирует переданную таблицу в строку.

Расширения для string

string.explode(separator: string, str: string, withpattern: bool) -> table[string]

Разбивает строку str на части по указанному разделителю/выражению separator и возвращает результат ввиде таблицы из строк. Если withpattern равен true, то параметр separator будет определяться как регулярное выражение.

string.split(str: string, delimiter: string) -> table[string]

Разбивает строку str на части по указанному разделителю delimiter и возвращает результат ввиде таблицы из строк.

string.pattern_safe(str: string)

Экранирует специальные символы в строке, такие как ()[]+-.$%^?* в формате %символ. Символ NUL (\0) будет преобразован в %z.

string.formatted_time(seconds: number, format: string) -> string | table

Разбивает секунды на часы, минуты и миллисекунды и форматирует в format с следующим порядком параметров: минуты, секунды, миллисекунды и после возвращает результат. Если format не указан, то возвращает таблицу, где: h - hours, m - minutes, s - seconds, ms - milliseconds.

string.replace(str: string, tofind: string, toreplace: string) -> string

Заменяет все подстроки в str, равные tofind на toreplace и возвращает строку со всеми измененными подстроками.

string.trim(str: string, char: string) -> string

Удаляет все символы, равные char из строки str с левого и правого конца и возвращает результат. Если параметр char не определен, то будут выбраны все пустые символы.

string.trim_left(str: string, char: string) -> string

Удаляет все символы, равные char из строки str с левого конца и возвращает результат. Если параметр char не определен, то будут выбраны все пустые символы.

string.trim_right(str: string, char: string) -> string

Удаляет все символы, равные char из строки str с правого конца и возвращает результат. Если параметр char не определен, то будут выбраны все пустые символы.

string.starts_with(str: string, start: string) -> bool

Возвращает true, если строка str начинается на подстроку start

string.ends_with(str: string, endStr: string) -> bool

Возвращает true, если строка str заканчивается на подстроку endStr

Также важно подметить, что все выше перечисленные функции, расширяющие string можно использовать как мета-методы на экземплярах строк, т.е.:

local str = "ABA str BAB"

if str:starts_with("ABA") and str:ends_with("BAB") then
	print(str:replace("BA", "DC"))
end

Также функции string.lower и string.upper переопределены на utf8.lower и utf8.upper

string.escape(str: string) -> string

Экранирует строку. Является псевдонимом utf8.escape.

string.escape_xml(text: str) -> str

Экранирует спец-символы XML. Является псевдонимом utf8.escape_xml.

string.pad(str: string, size: number, [опционально] char: string) -> string

Добавляет char слева и справа от строки, пока её размер не будет равен size. По стандарту char равен символу пробела

string.left_pad(str: string, size: number, [опционально] char: string) -> string

Добавляет char слева от строки, пока её размер не будет равен size. По стандарту char равен символу пробела

string.right_pad(str: string, size: number, [опционально] char: string) -> string

Добавляет char справа от строки, пока её размер не будет равен size. По стандарту char равен символу пробела

Расширения для math

math.clamp(_in, low, high)

Ограничивает число _in по лимитам low и high. Т.е.: Если _in больше чем high - вернётся high, если _in меньше чем low - вернётся low. В противном случае вернётся само число.

math.rand(low, high)

Возвращает случайное дробное число в диапазоне от low до high.

math.normalize(num: number, [опционально] conf: num) -> number

Возвращает нормализованное значение num относительно conf.

math.round(num: number, [опционально] places: num) -> number

Возвращает округлённое значение num до указанного количества знаков после запятой places.

math.sum(x: number, ... | t: table) -> number

Возвращает сумму всех принимаемых аргументов. Если в качестве аргумента была передана таблица, метод вернёт сумму всех её элементов.

Дополнительные глобальные функции

В этом же скрипте также определены и другие глобальные функции которые доступны для использования. Ниже их список

is_array(x: table) -> bool

Возвращает true, если переданная таблица является массивом, тоесть если каждый ключ это целое число больше или равное единице и если каждый ключ следует за прошлым.

function parse_path(path: string) -> string, string

Разбивает путь на две части и возвращает их: входную точку и путь к файлу.

function timeit(iters: integer, func: func, ...)

Вызывает функцию func iters раз, передавая ей аргументы ..., а после выводит в консоль время в микросекундах, которое прошло с момента вызова timeit.

function sleep(timesec: number)

Вызывает остановку корутины до тех пор, пока не пройдёт количество секунд, указанное в timesec. Функция может быть использована только внутри корутины.

function await(co: coroutine) -> result, error

Ожидает завершение переданной корутины, возвращая поток управления. Функция может быть использована только внутри корутины. Возвращает значения аналогичные возвращаемым значениям pcall.

os.pid -> number

Константа, в которой хранится PID текущего инстанса движка