Стандартные библиотеки Lua
Стандартные библиотеки Lua
Заголовок раздела «Стандартные библиотеки Lua»Базовые библиотеки Lua, автоматически доступные во всех процессах Wippy. Не требуют require().
Глобальные функции
Заголовок раздела «Глобальные функции»Типы и преобразование
Заголовок раздела «Типы и преобразование»type(value) -- Возвращает: "nil", "number", "string", "boolean", "table", "function", "thread", "userdata"tonumber(s [,base]) -- Преобразовать в число, опциональное основание (2-36)tostring(value) -- Преобразовать в строку, вызывает метаметод __tostringУтверждения и ошибки
Заголовок раздела «Утверждения и ошибки»assert(v [,msg]) -- Выбрасывает ошибку если v false/nil, иначе возвращает verror(msg [,level]) -- Выбрасывает ошибку на указанном уровне стека (по умолчанию 1)pcall(fn, ...) -- Защищённый вызов, возвращает ok, result_or_errorxpcall(fn, errh) -- Защищённый вызов с функцией-обработчиком ошибокИтерация по таблицам
Заголовок раздела «Итерация по таблицам»pairs(t) -- Итерация по всем парам ключ-значениеipairs(t) -- Итерация по массивной части (1, 2, 3, ...)next(t [,index]) -- Получить следующую пару ключ-значение после indexМетатаблицы
Заголовок раздела «Метатаблицы»getmetatable(obj) -- Получить метатаблицу (или поле __metatable если защищено)setmetatable(t, mt) -- Установить метатаблицу, возвращает tПрямой доступ к таблице
Заголовок раздела «Прямой доступ к таблице»Обход метаметодов для прямого доступа к таблице:
rawget(t, k) -- Получить t[k] без __indexrawset(t, k, v) -- Установить t[k]=v без __newindexrawequal(a, b) -- Сравнить без __eqУтилиты
Заголовок раздела «Утилиты»select(index, ...) -- Вернуть аргументы начиная с indexselect("#", ...) -- Вернуть количество аргументовunpack(t [,i [,j]]) -- Вернуть t[i] до t[j] как множественные значенияprint(...) -- Вывести значения (использует структурированное логирование в Wippy)Глобальные переменные
Заголовок раздела «Глобальные переменные»_G -- Глобальная таблица окружения_VERSION -- Строка версии LuaРабота с таблицами
Заголовок раздела «Работа с таблицами»Функции для модификации таблиц:
table.insert(t, [pos,] value) -- Вставить значение в позицию pos (по умолчанию: конец)table.remove(t [,pos]) -- Удалить и вернуть элемент в позиции pos (по умолчанию: последний)table.concat(t [,sep [,i [,j]]]) -- Конкатенировать элементы массива с разделителемtable.sort(t [,comp]) -- Сортировать на месте, comp(a,b) возвращает true если a < btable.pack(...) -- Упаковать varargs в таблицу с полем 'n'table.unpack(t [,i [,j]]) -- Распаковать элементы таблицы как множественные значенияlocal items = {"a", "b", "c"}
table.insert(items, "d") -- {"a", "b", "c", "d"}table.insert(items, 2, "x") -- {"a", "x", "b", "c", "d"}table.remove(items, 2) -- {"a", "b", "c", "d"}, возвращает "x"
local csv = table.concat(items, ",") -- "a,b,c,d"
table.sort(items, function(a, b) return a > b -- По убываниюend)Строковые операции
Заголовок раздела «Строковые операции»Функции работы со строками. Также доступны как методы строковых значений:
Поиск по паттернам
Заголовок раздела «Поиск по паттернам»string.find(s, pattern [,init [,plain]]) -- Найти паттерн, возвращает start, end, capturesstring.match(s, pattern [,init]) -- Извлечь соответствующую подстрокуstring.gmatch(s, pattern) -- Итератор по всем совпадениямstring.gsub(s, pattern, repl [,n]) -- Заменить совпадения, возвращает строку, количествоРегистр
Заголовок раздела «Регистр»string.upper(s) -- Преобразовать в верхний регистрstring.lower(s) -- Преобразовать в нижний регистрПодстроки и символы
Заголовок раздела «Подстроки и символы»string.sub(s, i [,j]) -- Подстрока от i до j (отрицательные индексы с конца)string.len(s) -- Длина строки (или используйте #s)string.byte(s [,i [,j]]) -- Числовые коды символовstring.char(...) -- Создать строку из кодов символовstring.rep(s, n [,sep]) -- Повторить строку n раз с разделителемstring.reverse(s) -- Перевернуть строкуФорматирование
Заголовок раздела «Форматирование»string.format(fmt, ...) -- Форматирование в стиле printfСпецификаторы формата: %d (целое), %f (дробное), %s (строка), %q (в кавычках), %x (hex), %o (octal), %e (научная нотация), %% (буквальный %)
local s = "Hello, World!"
-- Поиск по паттернуlocal start, stop = string.find(s, "World") -- 8, 12local word = string.match(s, "%w+") -- "Hello"
-- Заменаlocal new = string.gsub(s, "World", "Wippy") -- "Hello, Wippy!"
-- Синтаксис методовlocal upper = s:upper() -- "HELLO, WORLD!"local part = s:sub(1, 5) -- "Hello"Паттерны
Заголовок раздела «Паттерны»| Паттерн | Соответствует |
|---|---|
. | Любой символ |
%a | Буквы |
%d | Цифры |
%w | Буквы и цифры |
%s | Пробельные символы |
%p | Пунктуация |
%c | Управляющие символы |
%x | Шестнадцатеричные цифры |
%z | Ноль (null) |
[set] | Класс символов |
[^set] | Отрицание класса |
* | 0 или более (жадный) |
+ | 1 или более (жадный) |
- | 0 или более (ленивый) |
? | 0 или 1 |
^ | Начало строки |
$ | Конец строки |
%b() | Сбалансированная пара |
(...) | Группа захвата |
Версии в верхнем регистре (%A, %D и т.д.) соответствуют дополнению.
Математические функции
Заголовок раздела «Математические функции»Математические функции и константы:
Константы {id=“math-constants”}
Заголовок раздела «Константы {id=“math-constants”}»math.pi -- 3.14159...math.huge -- Бесконечностьmath.mininteger -- Минимальное целоеmath.maxinteger -- Максимальное целоеБазовые операции
Заголовок раздела «Базовые операции»math.abs(x) -- Абсолютное значениеmath.min(...) -- Минимум из аргументовmath.max(...) -- Максимум из аргументовmath.floor(x) -- Округление внизmath.ceil(x) -- Округление вверхmath.modf(x) -- Целая и дробная частиmath.fmod(x, y) -- Остаток от деления с плавающей точкойСтепени и корни
Заголовок раздела «Степени и корни»math.sqrt(x) -- Квадратный кореньmath.pow(x, y) -- x^y (или используйте оператор x^y)math.exp(x) -- e^xmath.log(x [,base]) -- Натуральный логарифм (или логарифм по основанию n)Тригонометрия
Заголовок раздела «Тригонометрия»math.sin(x) math.cos(x) math.tan(x) -- Радианыmath.asin(x) math.acos(x) math.atan(y [,x])math.sinh(x) math.cosh(x) math.tanh(x) -- Гиперболическиеmath.deg(r) -- Радианы в градусыmath.rad(d) -- Градусы в радианыСлучайные числа
Заголовок раздела «Случайные числа»math.random() -- Случайное дробное [0,1)math.random(n) -- Случайное целое [1,n]math.random(m, n) -- Случайное целое [m,n]math.randomseed(x) -- Установить seedПреобразование типов
Заголовок раздела «Преобразование типов»math.tointeger(x) -- Преобразовать в целое или nilmath.type(x) -- "integer", "float" или nilmath.ult(m, n) -- Беззнаковое сравнение меньшеКорутины
Заголовок раздела «Корутины»Создание и управление корутинами. См. Каналы и корутины для каналов и паттернов конкурентности:
coroutine.create(fn) -- Создать корутину из функцииcoroutine.resume(co, ...) -- Запустить/продолжить корутинуcoroutine.yield(...) -- Приостановить корутину, вернуть значения в resumecoroutine.status(co) -- "running", "suspended", "normal", "dead"coroutine.running() -- Текущая корутина (nil если главный поток)coroutine.wrap(fn) -- Создать корутину как вызываемую функциюЗапуск конкурентных корутин
Заголовок раздела «Запуск конкурентных корутин»Запуск конкурентной корутины, работающей независимо (специфика Wippy):
coroutine.spawn(fn) -- Запустить функцию как конкурентную корутину-- Фоновая задачаcoroutine.spawn(function() while true do check_health() time.sleep("30s") endend)
-- Продолжить основное выполнение немедленноprocess_request()Обработка ошибок
Заголовок раздела «Обработка ошибок»Создание и классификация структурированных ошибок. См. Обработка ошибок для полной документации:
Константы {id=“error-constants”}
Заголовок раздела «Константы {id=“error-constants”}»errors.UNKNOWN -- Неклассифицированная ошибкаerrors.INVALID -- Неверный аргумент или вводerrors.NOT_FOUND -- Ресурс не найденerrors.ALREADY_EXISTS -- Ресурс уже существуетerrors.PERMISSION_DENIED -- Доступ запрещёнerrors.TIMEOUT -- Истекло время операцииerrors.CANCELED -- Операция отмененаerrors.UNAVAILABLE -- Сервис недоступенerrors.INTERNAL -- Внутренняя ошибкаerrors.CONFLICT -- Конфликт (например, параллельная модификация)errors.RATE_LIMITED -- Превышен лимит запросовФункции {id=“error-functions”}
Заголовок раздела «Функции {id=“error-functions”}»-- Создать ошибку из строкиlocal err = errors.new("something went wrong")
-- Создать ошибку с метаданнымиlocal err = errors.new({ message = "User not found", kind = errors.NOT_FOUND, retryable = false, details = {user_id = 123}})
-- Обернуть существующую ошибку с контекстомlocal wrapped = errors.wrap(err, "failed to load profile")
-- Проверить тип ошибкиif errors.is(err, errors.NOT_FOUND) then -- обработать не найденоend
-- Получить стек вызовов из ошибкиlocal stack = errors.call_stack(err)Методы ошибок
Заголовок раздела «Методы ошибок»err:message() -- Получить сообщение ошибкиerr:kind() -- Получить тип ошибки (например, "NOT_FOUND")err:retryable() -- true, false или nil (неизвестно)err:details() -- Получить таблицу деталей или nilerr:stack() -- Получить стек трейс как строкуUTF-8 Unicode
Заголовок раздела «UTF-8 Unicode»Обработка UTF-8 строк:
Константы {id=“utf8-constants”}
Заголовок раздела «Константы {id=“utf8-constants”}»utf8.charpattern -- Паттерн, соответствующий одному UTF-8 символуФункции {id=“utf8-functions”}
Заголовок раздела «Функции {id=“utf8-functions”}»utf8.char(...) -- Создать строку из Unicode codepointsutf8.codes(s) -- Итератор по codepoints: for pos, code in utf8.codes(s)utf8.codepoint(s [,i [,j]]) -- Получить codepoints в позициях от i до jutf8.len(s [,i [,j]]) -- Посчитать UTF-8 символы (не байты)utf8.offset(s, n [,i]) -- Позиция в байтах n-го символа от позиции ilocal s = "Hello, 世界"
-- Подсчёт символов (не байтов)print(utf8.len(s)) -- 9
-- Итерация по codepointsfor pos, code in utf8.codes(s) do print(pos, code, utf8.char(code))end
-- Получить codepoint в позицииlocal code = utf8.codepoint(s, 8) -- Первый китайский символ
-- Создать строку из codepointslocal emoji = utf8.char(0x1F600) -- Улыбающееся лицоОграниченные возможности
Заголовок раздела «Ограниченные возможности»Следующие стандартные возможности Lua НЕ доступны из соображений безопасности:
| Возможность | Альтернатива |
|---|---|
load, loadstring, loadfile, dofile | Используйте модуль Динамическое выполнение |
collectgarbage | Автоматический GC |
rawlen | Используйте оператор # |
io.* | Используйте модуль Файловая система |
os.execute, os.exit, os.remove, os.rename, os.tmpname | Используйте модули Выполнение команд, Окружение |
debug.* (кроме traceback) | Недоступно |
package.loadlib | Нативные библиотеки не поддерживаются |
См. также
Заголовок раздела «См. также»- Каналы и корутины — каналы в стиле Go для конкурентности
- Обработка ошибок — создание и обработка структурированных ошибок
- Системное время — функции системного времени