Стандартные библиотеки обеспечивают полезные функции, которые выполнены непосредственно через стандартный API. Следовательно, они не так уж и необходимы для самого языка, а обеспечиваются как отдельные C-модули. В настоящее время, Lua имеет следующие стандартные библиотеки:
Чтобы иметь доступ
к этим библиотекам, ведущая C-программа должна вызвать функции lua_baselibopen
, lua_strlibopen
, lua_mathlibopen
и lua_iolibopen
, которые объявлены в
файле заголовков lualib.h
.
Базисная библиотека обеспечивает некоторые основные функции для Lua.
Следовательно, если Вы не включаете эту библиотеку в Вашей прикладной программе,
Вы должны тщательно проверить, должны ли Вы обеспечить какую-то альтернативную
реализацию для некоторых средств. Например, без функции
_ERRORMESSAGE
Lua не способен показать сообщения об ошибках.
_ALERT
. Следовательно, программа может назначать другую функцию к
этой переменной, и изменять путь, которым такие сообщения показываются
(например, для систем без stderr
).
v
равен nil. Эта
функция эквивалентна следующей функции Lua:
function assert(v, m) if not v then m = m or "" error("assertion failed! " .. m) end end
func
с параметрами, заданными
таблицей arg
. Обращение эквивалентно
func(arg[1], arg[2], ..., arg[n])где
n
представляет собой результат getn(arg)
.
Все результаты из func
просто возвращены call
.
По умолчанию, если ошибка происходит в течение обращения к func
,
она объясняется подробно. Если строка mode
включает
"x"
, то обращение защищено. В этом режиме обращение к
функции не call
не объясняет ошибку подробно, независимо от того,
что случается в течение обращения. Вместо этого, это возвращает nil,
чтобы сообщить об ошибке (помимо вызова приспособленного драйвера ошибки).
Если errhandler
обеспечивается, функция ошибки
_ERRORMESSAGE
временно установлена к errhandler
на
время выполнения func
. В частности, если errhandler
равен nil, никакие сообщения об ошибках не будут выданы в течение
выполнения вызванной функции вообще.
Устанавливает порог для мусоросборщика в данное значение (в Kbytes). Если
новый порог меньше, чем счетчик байтов, то Lua немедленно выполняет уборку
мусора в памяти. Если limit
отсутствует, значением по умолчанию
является ноль (таким образом уборка мусора запустится сразу).
tagto
.
dofile
выполняет содержание стандартного ввода (stdin
). Если имеется любая
ошибка, dofile
вернет nil. Иначе это возвращает значения,
возвращенные кодом, или значение не-nil, если блок кода не возвращает
никаких значений. Это выдает ошибку, когда вызвано не со строчным параметром.
dostring
вернет nil. Иначе это возвращает значения,
возвращенные кодом, или значение не-nil, если код не возвращает никакие
значения. Факультативный параметр chunkname
имя кода, используемого
для информации об ошибках и отладочных сообщений.
lua_dofile
, lua_dostring
, lua_dobuffer
или lua_callfunction
, в Lua: dofile
, dostring
или call
в защищенном режим). Если message
равно nil, то драйвер ошибки не будет вызван.
Функция error
никогда ничего не возвращает.
func
над всеми элементами таблицы table
. Для каждого
элемента, функция вызвана с индексом и соответствующим значением как
параметрами. Если функция возвращает любое значение не-nil, то цикл
завершается, и это значение будет возвращено как конечное значение foreach
. Эта функция могла бы быть определена в Lua так:
function foreach (t, f) for i, v in t do local res = f(i, v) if res then return res end end endПоведение
foreach
неопределено, если Вы изменяете
таблицу t
в ходе работ.
func
над числовыми индексами таблицы table
. Для
каждого индекса функция вызвана с индексом и соответствующим значением как
параметрами. Индексы обрабатываются в последовательном порядке, от 1 до n
, где n
представляет собой результат getn(table)
. Если функция возвращает любое значение не-nil,
то цикл прерывается, а это значение будет возвращено как конечное значение foreachi
. Эта функция могла бы быть определена в Lua таким образом:
function foreachi (t, f) for i=1,getn(t) do local res = f(i, t[i]) if res then return res end end end
name
задает имя переменной.
n
полей с числовым
значением, это количество и будет размером таблицы. Иначе размером является
самый большой числовой индекс со значением не-nil в таблице. Эта функция могла
бы быть определена в Lua так:
function getn (t) if type(t.n) == "number" then return t.n end local max = 0 for i, _ in t do if type(i) == "number" and i>max then max=i end end return max end
table
задан, то это
также устанавливает его как новую таблицу глобальных переменных.
next
вернет следующий индекс таблицы и
значение, связанное с индексом. Когда вторым параметром является nil, next
вернет первый индекс таблицы и связанное значение. При вызове
с последним индексом или с nil в пустой таблице, next
вернет nil. Если второй параметр отсутствует, то это интерпретируется как
указание nil.
Lua не имеет никакого объявления полей: семантически не имеется никакого
различия между полем, не представленным в таблице, или полем со значением
nil. Следовательно, next
рассматривает только поля со
значениями не-nil. Порядок, в котором индексы перечислены, не определен
даже для числовых индексов. Чтобы обработать таблицу в числовом порядке, надо
использовать функцию foreachi.
Поведение next
неопределено, если Вы изменяете таблицу
в ходе работ.
tostring
. Эта функция не предназначена для форматируемого вывода,
ее следует рассматривать только как быстрый способ показать значение, например
для отладки.
table[index]
без того, чтобы вызвать любой метод тэга.
Таблица должна быть задана как table
, а index
представляет собой любое значение, отличное от nil.
table[index]
в value
без того, чтобы
вызвать любой метод тэга. Параметр table
должен быть таблицей, index
представляет собой любое значение, отличное от nil, а value
задает любое значение Lua.
tag
) должен быть значением, созданным через newtag
. settag
вернет значение первого параметра
(таблицу). Для безопасности ведущих программ невозможно изменить тэг userdata
прямо из Lua.
newmethod
равно nil, то settagmethod
восстанавливает заданное по умолчанию
поведение для данного события. Эта функция не может использоваться, чтобы
установить метод для события gc. Такие методы могут управляться только C-кодом.
table[1]
и помещаются в table[n]
, где n
представляет собой результат getn(table)
. Если comp
задан, то это должно быть
функцией, которая получает два элемента таблицы и возвращает истину (то есть
значение, отличное от nil), когда первый меньше, чем второй (так, чтобы not comp(a[i+1], a[i])
был истиной после сортировки). Если comp
не задано, то вместо этого используется стандартный оператор <
языка Lua.
Алгоритм сортировки неустойчив (то есть элементы, рассматриваемые как равные, могут изменить свои относительные позиции после сортировки).
tonumber
вернет это число, иначе это всегда возвращает nil.
Факультативный параметр определяет ядро, чтобы интерпретировать цифру. Ядром может быть любое целое число между 2 и 36 включительно. В базах более, чем 10, символ A (заглавные или строчные буквы) представляет 10, B соответствует 11 и так далее до символа Z, соответствующему 35. В ядре 10 (значение по умолчанию) число может иметь десятичную часть, также как и факультативную часть экспоненты. В других базах только целые числа без знака.
format
.
Вставляет значение элемента value
в позицию pos
таблицы, сдвигая другие элементы в случае необходимости на открытое место.
Значение по умолчанию для pos
равно n+1
, где
n
является результатом getn(table)
так, чтобы
обращение tinsert(t,x)
вставило x
в конец таблицы
t
. Эта функция также устанавливает или увеличивает поле
n
таблицы, превращая его в n+1
. Эта функция
эквивалентна следующей функции Lua, за исключением того, что доступ к таблице
прямой (без методов тэгов):
function tinsert (t, ...) local pos, value local n = getn(t) if arg.n == 1 then pos, value = n+1, arg[1] else pos, value = arg[1], arg[2] end t.n = n+1; for i=n,pos,-1 do t[i+1] = t[i] end t[pos] = value end
Удаляет из таблицы table
элемент в позиции pos
,
сдвигая в случае необходимости другие элементы, чтобы закрыть образовавшуюся
дырку. Возвращает значение удаленного элемента. Значение по умолчанию для
pos
равно n
, где n
является результатом
getn(table)
, чтобы обращение tremove(t)
удалило
последний элемент из таблицы t
. Эта функция также устанавливает
поле n
таблицы в значение n-1
.
Эта функция эквивалентна следующей функции Lua, за исключением того, что доступ к таблице прямой (без использования методов тэгов):
function tremove (t, pos) local n = getn(t) if n<=0 then return end pos = pos or n local value = t[pos] for i=pos,n-1 do t[i] = t[i+1] end t[n] = nil t.n = n-1 return value end
"nil"
(строка, а не
значение nil!), "number"
, "string"
, "table"
, "function"
и "userdata"
.
s
. Если i
отсутствует, то принято 1. i
может быть отрицателен.
Числовые коды не обязательно переносимы между платформами.
Числовые коды не обязательно переносимы между платформами.
pattern
в s
. Если это найдено, strfind
вернет индексы s
, где эти вхождения начинаются и заканчивается, иначе это
возвращает nil. Если образец определяет набор данных (подробности в
описании gsub
ниже), зафиксированные строки возвращены как
дополнительные результаты. Факультативный числовой параметр init
определяет, где запустить поиск: значение по умолчанию 1, и оно может быть
отрицательным. Четвертый факультативный аргумент plain
выключает
средства поиска образца, так что функция просто ищет подстроку без символов в pattern
, обрабатываемых особым образом. Обратите внимание, что если
задана опция plain
, должна быть задана и init
.
""
) имеет длину 0. Вложенные ноли в строке
считаются, так что строка "a\000b\000c"
имеет длину 5 символов.
n
копий строки s
.
s
, начинающегося в i
и продолжающейся до j
. i
и j
могут быть отрицательными, Если j
отсутствует, то
оно считается равным -1 (длине строки). В частности, обращение strsub(s,1,j)
возвращает префикс s
длиной j
, а вызов strsub(s, -i)
вернет суффикс s
длиной i
.
printf
в C. Единственное различие состоит в
том, что параметры *
, l
, L
, n
, p
и h
тут не работают, зато имеется
дополнительная опция q
. Опция q
форматирует строку в
форме, подходящей, чтобы безопасно читаться обратно Lua интерпретатором. Строка
записана между двойными кавычками, а все двойные кавычки и спецсимволы будут
правильно экранированы при записи. Например, обращение
format('%q', 'a string with "quotes" and \n new line')произведет такую строку:
"a string with \"quotes\" and \ new line"
Преобразования могут применяться к энному параметру в списке параметров
вместо следующего неиспользуемого параметра. В этом случае символ %
заменен последовательностью %d$
, где d
десятичная
цифра в диапазоне [1,9], определяет позицию параметра в списке. Например,
обращение format("%2$d -> %1$03d", 1, 34)
выдаст результат
"34 -> 001"
. Тот же самый параметр может использоваться больше,
чем в одном преобразовании.
Опции c
, d
, E
, e
,
f
, g
, G
, i
, o
,
u
, X
и x
все ожидают число как параметр,
в то время как q
и s
ожидают строку. Модификатор
*
может применяться, формируя соответствующую строку формата.
Например, "%*g"
может соответствовать
"%"...что-то-внутри..."g"
.
Ни строка формата, ни значения строки, которые нужно форматировать с
%s
, не могут содержать вложенные ноли. Но %q
обрабатывает значения строк с вложенными нолями.
s
, в которой все местонахождения образца pat
были
заменены строкой замены, определенной в repl
. Функция gsub
также возвращает, как второе значение, общее количество
сделанных замен.
Если repl
является строкой, то значение используется для замены
как есть. Любая последовательность в repl
в форме %n
с
n
от 1 до 9 предназначена для n-й зафиксированной
подстроки.
Если repl
представляет собой функцию, то эта функция будет
вызвана каждый раз, когда соответствие происходит, со всеми зафиксированными
подстроками, переданными как параметры. Если значение, возвращенное этой
функцией, является строкой, то это используется как строка для замены, иначе
берется пустая строка.
Последний факультативный параметр n
ограничивает максимальное
число замен. Например, когда n
равно 1, только первое
местонахождение pat
будет обработано.
Имеются некоторые примеры:
x = gsub("hello world", "(%w+)", "%1 %1") --> x="hello hello world world" x = gsub("hello world", "(%w+)", "%1 %1", 1) --> x="hello hello world" x = gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1") --> x="world hello Lua from" x = gsub("home = $HOME, user = $USER", "%$(%w+)", getenv) --> x="home = /home/roberto, user = roberto" (for instance) x = gsub("4+5 = $return 4+5$", "%$(.-)%$", dostring) --> x="4+5 = 9" local t = {name="lua", version="4.0"} x = gsub("$name - $version", "%$(%w+)", function (v) return %t[v] end) --> x="lua - 4.0" t = {n=0} gsub("first second word", "(%w+)", function (w) tinsert(%t, w) end) --> t={"first", "second", "word"; n=3}
^$()%.[]*+-?
.
Представляет непосредственно символ x.
%
, когда символ применен в образце.
char-set
. Диапазон символов может быть определен, отделяя
конечные символы диапазона тире (-
). Все классы
%
x, описанные выше, могут также использоваться как
компоненты в char-set. Все другие символы в char-set представляются как есть.
Например, [%w_]
(или [_%w]
) представляет все
алфавитно-цифровые символы плюс символ подчеркивания, [0-7]
представляет восьмеричные цифры, а [0-7%l%-]
представляет
восьмеричные цифры плюс символы строчных букв плюс символ тире. Взаимодействие
между диапазонами и классами не определено. Следовательно, образцы, подобные
[%a-z]
или [a-%%]
не имеют никакого значения.
char-set
, где char-set
интерпретируется как выше.Для всех классов, представляемых одиночными символами (%a
,
%c
, ...), соответствующая прописная буква представляет дополнение
класса. Например, %S
представляет все не пробелы.
Определения символа, пробела и т.д. зависят от текущего региона. В частности,
класс [a-z]
не может быть эквивалентен %l
. Вторая
форма должна быть предпочтительней для переносимости.
*
, что
соответствует 0 или большему количеству повторений символов в классе. Эти
элементы повторения будут всегда соответствовать самой длинной возможной
последовательности.
+
, что
соответствует 1 или большему количеству повторений символов в классе. Эти
элементы повторения будут всегда соответствовать самой длинной возможной
последовательности.
-
, что также
соответствует 0 или большему количеству повторений символов в классе. В
отличие от *
, элементы повторения будут всегда соответствовать
самой короткой возможной последовательности.
?
, что
соответствует 0 или 1 местонахождению символа в классе.
%b()
соответствует выражениям со сбалансированными круглыми
скобками.^
) в начале
образца закрепляет соответствие в начале подчиненной строки. $
в
конце образца закрепляет соответствие в конце подчиненной строки. В других
позициях ^
и $
не имеют никакого специального значения
и представляются как есть.
"(a*(.)%w(%s*))"
, часть соответствия
строки "a*(.)%w(%s*)"
сохранена как первый сбор данных (а,
следовательно, имеет номер 1), символьное соответствие .
зафиксировано с номером 2, а часть, соответствующая %s*
, конечно,
имеет номер 3.
Образец не может содержать вложенные ноли. Используйте вместо этого
%z
.
Эта библиотека предоставляет интерфейс к некоторым функциям стандартной
математической библиотеки C. Кроме того, это регистрирует метод тэга для
двоичного оператора ^
, который возвращает x^y, когда
применяется к числам x^y
.
Библиотека обеспечивает следующие функции:
abs acos asin atan atan2 ceil cos deg exp floor log log10 max min mod rad sin sqrt tan frexp ldexp random randomseedПлюс глобальная переменная PI. Большинство из них представляют собой только интерфейсы к функциям в C-библиотеке, за исключением того, что для тригонометрических функций все углы выражены в градусах, а не в радианах. Функции
deg
и rad
могут
использоваться для того, чтобы преобразовывать данные между радианами и
градусами.
Функция max
возвращает максимальное значение числовых
параметров. Точно так же min
вычисляет минимум. Обе они могут
использоваться с 1, 2 или большим количеством параметров.
Функции random
и randomseed
представляют собой
интерфейсы к простому генератору случайных чисел, предоставляемому ANSI C
(соответвенно функции rand
и srand
). Не может быть
дпно никаких гарантий касательно их статистических свойств. Функция
random
при вызове без параметров возвращает псевдослучайное
вещественное число в диапазоне [0,1). При вызове с параметром n,
random
вернет псевдослучайное целое число в диапазоне [1,n].
При вызове с двумя параметрами l и u, random
вернет
псевдослучайное целое число в диапазоне [l,u]. Границы всегда входят в
диапазон.
Все операции ввода-вывода в Lua реализованы через два дескриптора файла, по одному на ввод и вывод.
Эти дескрипторы сохранены в двух глобальных переменных Lua, названных
_INPUT
и _OUTPUT
. Глобальные переменные
_STDIN
, _STDOUT
и _STDERR
инициализированы с описателями файлов для stdin
,
stdout
и stderr
. Первоначально Initially,
_INPUT=_STDIN
и _OUTPUT=_STDOUT
.
Дескриптор файла представляет собой объект userdata, содержащий поток файла
(FILE*
) с отличительным тэгом, созданным библиотекой ввода-вывода
(I/O).
Если иное не установлено, все функции I/O возвращают nil на сбое и некоторое значение, отличное от nil, при успехе.
Эта функция открывает файл в режиме, определенном в строке mode
.
Это возвращает новый дескриптор файла или, в случае ошибок, nil плюс
строку, описывающую ошибку. Эта функция не изменяет _INPUT
или
_OUTPUT
.
Строка mode
может быть любой из следующего списка:
mode
может также иметь в
конце b
, что необходимо в некоторых системах, чтобы открыть файл в
двоичном режиме. Эта строка аналогична той, что используется в стандартной
функции C fopen
.
Эта функция закрывает файл. Это не изменяет _INPUT
или
_OUTPUT
.
Эта функция может быть вызвана двумя путями. Когда она вызвана с именем
файла, открывает именованный файл, устанавливает дескриптор как значение
_INPUT
и возвращает это значение. Это не закрывает текущий файл
input. При вызове без параметров, она закрывает файл _INPUT
и
восстанавливает stdin
как значение _INPUT
. Если эта
функция где-то не сработала, она возвращает nil плюс строку описания.
Если filename
начинается с символа трубопровода |
,
открывается поточный ввод через функцию popen. Не все системы его выполняют. Кроме того, число
файлов, которые могут быть открыты в то же самое время, обычно ограничивается и
зависит от системы.
Эта функция может быть вызвана двумя путями. Когда она вызвана с именем
файла, открывает именованный файл, устанавливает дескриптор как значение
_OUTPUT
и возвращает это значение. Это не закрывает текущий
выходной файл. Обратите внимание, что если файл уже существует, то он будет
полностью уничтожен этой операцией. Когда функция вызвана без параметров,
она закрывает файл _OUTPUT
и восстанавливает stdout
как значение _OUTPUT
. В случае ошибки функция возвращает nil
плюс строку, описывающую ошибку.
Если filename
начинается с символа трубопровода |
,
открывается поточный ввод через функцию popen. Не все системы его выполняют. Кроме того, число
файлов, которые могут быть открыты в то же самое время, обычно ограничивается и
зависит от системы.
Открывает файл, именованный filename
и устанавливает это как
значение _OUTPUT
. В отличие от операции writeto
, эта
функция не стирает предыдущее содержание файла, вместо этого все, что пишется в
файл, будет конкатенировано к концу. Если эта функция получила сбой, она вернет
nil плюс строку, описывающую ошибку.
Удаляет файл с данным именем. Если эта функция получила сбой, она вернет nil плюс строку с описанием ошибки.
Переименовывает файл name1
в name2
. Если эта
функция получила сбой, она вернет nil плюс строку с описанием ошибки.
Сохраняет любые записанные данные в заданный файл. Если
filehandle
не определен, то flush
сбросит на диск все
открытые файлы. Если эта функция получила сбой, она вернет nil плюс
строку с описанием ошибки.
Получает позицию файла, измеряемую в байтах от начала файла, и меняет ее на
позицию, данную смещением offset
плюс ядром, определенным как
строка whence
следующим образом:
seek
возвращает
конечную позицию файла, измеряемую в байтах от начала файла. Если эта функция
получила сбой, она вернет nil плюс строку, описывающую эту ошибку.
Значение по умолчанию для whence
равно cur
, а для
offset
это 0. Следовательно, вызов seek(file)
возвращает текущую позицию файла без того, чтобы изменить это. Вызов
seek(file, "set")
устанавливает позицию на начало файла (и
возвращает 0), а seek(file, "end")
устанавливает позицию в конец
файла и возвращает его размер.
Возвращает строку с именем файла, которое может безопасно использоваться для временного файла. Файл должен быть явно открыт перед использованием и удален, когда больше не нужен.
Читает файл _INPUT
или filehandle
, если этот
параметр задан, согласно данным форматам, которые определяют, что читать. Для
каждого формата, функция возвращает строку или число с прочитанными данными или
nil, если не может читать данные с определенным форматом. Когда вызвана
без форматов, эта функция использует заданный по умолчанию формат, который
читает следующую строку.
Доступные форматы такие:
Пишет значение каждого из параметров в файл _OUTPUT
или в
filehandle
, если этот параметр задан. Параметры должны быть
строками или числами. Чтобы писать другие значения, используйте
tostring
или format
перед write
. Если эта
функция нарвалась на ошибку, она вернет nil и строку с описанием данной
ошибки.
Возвращает приближение количество времени CPU, используемое программой (в секундах).
Возвращает строку, содержащую дату и время, форматируемую согласно данному
формату format
. Формат задается по тем же самым правилам, что и в
функции ANSI C strftime
. Когда вызвана без параметров, возвращает
приемлемое представление даты и времени, которое зависит от ведущей системы и от
текущего региона.
Эта функция эквивалентна функции C system
. Это передает команду
command
, которая будет выполнена оболочкой операционной системы.
Возвращает код состояния, который является зависимым от системы.
Вызывает C-функцию exit
с факультативным кодом завершения
программы code
. Значение по умолчанию для code
: код
успешного завершения.
Возвращает значение системной переменной процесса varname
или
nil, если эта переменная не определена.
Эта функция предоставляет интерфейс к функции ANSI C setlocale
.
locale
представляет собой строку, определяющую регион,
category
факультативная строка, описывающая которую категорию
изменить: "all"
, "collate"
, "ctype"
,
"monetary"
, "numeric"
или "time"
,
заданная по умолчанию категория: "all"
. Функция возвращает имя
нового региона или nil, если этот запрос не может быть выполнен.