6 – Стандартные библиотеки

ENG

6 - Стандартные библиотеки

 

Стандартные библиотеки Lua обеспечивают полезные функции, которые реализуются непосредственно через C API. Некоторые из этих функций предоставляют важные услуги языка (например, typeи getmetatable); другие обеспечивают доступ к "внешних" служб (например, I / O); и другие могут быть реализованы в самом Lua, но весьма полезны или имеют критические требования к рабочим характеристикам , которые заслуживают внедрения в C (например, table.sort).

Все библиотеки реализуются через официальный C API и представлены в виде отдельных модулей C. В настоящее время Lua имеет следующие стандартные библиотеки:

  • базовая библиотека ( §6.1 );
  • сопрограммная библиотека ( §6.2 );
  • библиотека пакета ( §6.3 );
  • Строка манипуляции ( §6.4 );
  • базовая поддержка UTF-8 ( §6.5 );
  • Манипуляция таблица ( §6.6 );
  • математические функции ( §6.7 ) (син, журнал и т.д.);
  • ввод и вывод ( §6.8 );
  • возможности операционной системы ( §6.9 );
  • отладочные средства ( §6.10 ).

для основных и пакет библиотек Кроме этого, каждая библиотека предоставляет все свои функции как поля глобальной таблицы или как методы его объектов.

Для того, чтобы иметь доступ к этим библиотекам, программа хоста C должен вызвать luaL_openlibs функцию, которая открывает все стандартные библиотеки. В качестве альтернативы, программа хоста может открывать их по отдельности, используя luaL_requiref для вызова luaopen_base (для базовой библиотеки), luaopen_package(для библиотеки пакета), luaopen_coroutine (для сопрограммное библиотеки), luaopen_string (для строковой библиотеки), luaopen_utf8 (для библиотеки UTF8), luaopen_table (для библиотека таблица), luaopen_math (для математической библиотеки), luaopen_io (для библиотеки I / O), luaopen_os (для библиотеки операционной системы), и luaopen_debug (для библиотеки отладки). Эти функции объявлены в lualib.h.

6.1 - Основные функции

Основная библиотека предоставляет основные функции для Lua. Если вы не включите эту библиотеку в вашем приложении, вы должны тщательно проверить, нужно ли предоставить реализации для некоторых из своих объектов.

assert (v [, message])

Вызовы , errorесли значение аргумента vявляется ложным (то есть ноль или ложь ); в противном случае возвращает все свои аргументы. В случае ошибки, messageявляется объектом ошибки; если отсутствует, то по умолчанию " assertion failed!"

collectgarbage ([opt [, arg]])

Эта функция является общий интерфейс для сборки мусора. Он выполняет различные функции в соответствии с его первым аргументом, opt:

  • " collect": Выполняет полный цикл сборки мусора. Этот вариант используется по умолчанию.
  • " stop": Останавливает автоматическое выполнение сборки мусора. Коллектор будет работать только тогда , когда явно вызывается, пока вызов не перезапустить его.
  • " restart": Перезапускает автоматическое выполнение сборки мусора.
  • " count": Возвращает общую память в использовании по Lua в кбайт. Значение имеет дробную часть, так что она умножается на 1024 дает точное число байтов , используемых по Lua (за исключением переливов).
  • " step": Выполняет шаг сборки мусора. Стадию "размер" находится под контролем arg. При нулевом значении, коллектор будет выполнять одну основную (неделимый) шаг. Для ненулевых значений, коллектор будет выполнять , как если этот объем памяти (в килобайтах) было выделено Lua. Возвращает истинное если шаг закончил цикл сбора.
  • " setpause": Устанавливает в argкачестве нового значения для паузы коллектора (см п.2.5 ). Возвращает предыдущее значение для паузы .
  • " setstepmul": Устанавливает в argкачестве нового значения для шага множителя коллектора (см п.2.5 ). Возвращает предыдущее значениешага .
  • " isrunning": Возвращает логическое , который говорит , работает ли коллектор (т.е. не прекращался).

dofile ([filename])

Открывает указанный файл и выполняет его содержимое в виде порции Lua. При вызове без аргументов, dofile выполняет содержимое стандартного ввода ( stdin). Возвращает все значения , возвращаемые куске. В случае ошибок, dofile распространяет сообщение об ошибке в вызывающую (то есть, dofile не работает в защищенном режиме).

error (message [, level])

Завершает последнюю защищенную функцию с именем и возвращает в message качестве объекта ошибки. Функция errorникогда не возвращается.

Как правило, error добавляет некоторую информацию о положении ошибки в начале сообщения, если сообщение является строкой. level Аргумент определяет , как получить позицию ошибки. С уровня 1 (по умолчанию), то положение ошибки , когда error функция была вызвана. Уровень 2 балла ошибка, где функция , которая называется error была названа; и так далее. Проходя уровень 0 позволяет избежать добавления информации оположении ошибки в сообщении._G

Глобальная переменная (не функция) , которая содержит глобальную окружающую среду (см §2.2 ). Сам Lua не использует эту переменную;изменяя его значение не влияет на окружающую среду, ни наоборот.

getmetatable (object)

Если objectне имеет метатаблицу, возвращает ноль . В противном случае, если метатаблица объекта имеет __metatable поле, возвращает соответствующее значение. В противном случае, возвращает метатаблицу данного объекта.

ipairs (t)

Возвращает три значения (функция итератор, таблица t, и 0) , так что строительство

     for i,v in ipairs(t) do body end

Переберем пар ключ-значение ( 1,t[1]), ( 2,t[2]), ..., вплоть до первого значения равны нулю.

load (chunk [, chunkname [, mode [, env]]])

Грузы кусок.

Если chunk это строка, то порция эта строка. Если chunk есть функция, load называет его несколько раз , чтобы получить Кусок штук. Каждый вызов chunk должен возвращать строку, объединяющее с предыдущими результатами. Возвращение пустой строки, ноль , или нет значения сигнализирует конец фрагмента.

Если нет синтаксических ошибок, возвращает скомпилированный кусок в виде функции; в противном случае возвращает ноль плюс сообщение об ошибке.

Если полученная функция имеет upvalues, первый повышать стоимость устанавливается на значение env, если этот параметр задан, то или к значению глобальной окружающей среды. Другие upvalues инициализируются с нуля . (При загрузке основной кусок, полученная функция всегда будет иметь ровно один повышать стоимость, то _ENV переменная (см §2.2 ). Тем не менее, при загрузке двоичного кусок , созданный из функции (смstring.dump), полученная функция может иметь произвольное число из upvalues.) Все upvalues свежие, то есть, они не используются совместно с какой - либо другой функции.

chunknameиспользуется в качестве имени фрагмента для сообщений об ошибках и отладочной информации (см §4.9 ). Когда отсутствует, то поумолчанию chunk, если chunkэто строка, или " =(load)" в противном случае.

Строковые modeэлементы управления , может ли быть фрагмент текста или двоичный (то есть, скомпилированных кусок). Это может быть строка "b" (только бинарные куски), " t" (только текстовые чанки) или " bt" (как двоичный и текст). По умолчанию " bt".

Lua не проверяет согласованность бинарных кусками. Вредоносный бинарные куски может привести к сбою интерпретатора.

loadfile ([filename [, mode [, env]]])

Аналогично load, но получает кусок из файла filename  или из стандартного ввода, если имя файла не задано.

next (table [, index])

Позволяет программе обходить все поля таблицы. Его первый аргумент представляет собой таблицу , а второй аргумент является индексом в этой таблице. next Возвращает следующий индекс таблицы и связанного с ним значения. При вызове с нуля в качестве второго аргумента, next возвращает начальный индекс и связанное с ним значение. При вызове с последним индексом, или с нуля в пустой таблице, next возвращает ноль . Если второй аргумент отсутствует, то он интерпретируется как ноль . В частности, вы можете использовать , next(t) чтобы проверить, пуст ли таблица.

Порядок , в котором перечислены индексы не указан, даже для числовых индексов . (Для перемещения таблицы в порядке, используйте числовой для .)

Поведение next не определено , если, во время обхода, то присвоить любое значение несуществующего поля в таблице. Однако вы можете изменить существующие поля. В частности, вы можете очистить существующие поля.

pairs (t)

Если tесть метаметод __pairs, называет его в качестве аргумента и возвращает первые три результата от вызова.

В противном случае, возвращает три значения: при регистрации next функции, таблицы t, и нулевые , так что строительство

     for k,v in pairs(t) do body end

будет перебрать все пары ключ-значение таблицы t.

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

pcall (f [, arg1, ···])

Вызовы функций с заданными аргументами в защищенном режиме . Это означает, что любая ошибка внутри  не распространяется; вместо этого, pcall перехватывает ошибку и возвращает код состояния. Ее первый результат код состояния (логическое значение), которое является истинным ,если вызов выполняется успешно без ошибок. В таком случае pcall также возвращает все результаты вызова, после этого первого результата. В случае возникновения каких - либо ошибок, pcall возвращает ложь плюс сообщение об ошибке.

print (···)

Получает любое количество аргументов и печатает их значения stdout, используя tostring функцию , чтобы преобразовать каждый аргумент в строку. print Не предназначена для форматированного вывода, но только как быстрый способ , чтобы показать значение, например , для отладки.Для получения полного контроля над выходом, используйте string.format и io.write.

rawequal (v1, v2)

Проверяет , является ли v1равен v2, без вызова __eq метаметод. Возвращает логическое значение.

rawget (table, index)

Получает реальное значение table[index], без вызова __index метаметод. table Должна быть таблица, index может быть любое значение.

rawlen (v)

Возвращает длину объекта v, который должен быть таблицей или строкой, без вызова __len метаметод. Возвращает целое число.

rawset (table, index, value)

Устанавливает реальное значение table[index] для value, без вызова __newindex метаметод. table Должен быть таблицей, index любое значение ,отличное от нуля, и Нэн, и value любое значение Lua.

Эта функция возвращает table.

select (index, ···)

Если indexэто число, возвращает все аргументы после ряда аргументов index; а отрицательные показатели число от конца (-1 это последний аргумент). В противном случае, indexдолжен быть строкой "#", и select возвращает общее число дополнительных аргументов он получил.

setmetatable (table, metatable)

Устанавливает метатаблицу для данной таблицы. (Для изменения метатаблицу других типов из Lua кода, вы должны использовать библиотеку отладки ( §6.10 ).) Если  metatable это ноль , удаляет метатаблицу данной таблицы. Если исходный метатаблица имеет __metatable поле, вызывает ошибку.

Эта функция возвращает table.

tonumber (e [, base])

Когда не вызывается без base, tonumber пытается преобразовать свой аргумент в число. Если аргумент уже является числом или строкой ,конвертируемой в число, а затем tonumber возвращает это число; в противном случае, он возвращает ноль .

Преобразование строк может привести к целых или поплавками, в соответствии с лексическими конвенций Lua (см п.3.1 ). (Строка может иметь начальные и конечные пробелы и знак.)

При вызове base, то eдолжна быть строка , которая будет интерпретироваться как целое позицией в этой базе. Основание может быть любым целым числом от 2 до 36, включительно. В базах выше 10, буква ' A' (в любом верхнем или нижнем регистре) представляет 10, ' B' представляет 11, и так далее, с ' Z' , представляющая 35. Если строка eне является допустимым номером в данной базе, функция возвращает NIL .

tostring (v)

Получает значение любого типа и преобразует его в строку в воспринимаемом формате. (Для полного управления тем, как числа будут преобразованы, используйте string.format.)

Если метатаблицу vимеет __tostring поле, а затем tostring вызывает соответствующее значение с в качестве аргумента, и использует результат вызова в качестве результата.

type (v)

Возвращает тип единственного аргумента, закодированного в виде строки. Возможные результаты этой функции "nil" (строка, а не значение ноль), " number", "string", " boolean", " table", " function", " thread" и " userdata".

_VERSION

Глобальная переменная (не функция) , которая содержит строку , содержащую версию Lua работает. Текущее значение этой переменной равно "Lua 5.3".

xpcall (f, msgh [, arg1, ···])

Эта функция аналогична pcall, за исключением того, что он устанавливает новый обработчик сообщений msgh.

6.2 - сопрограммная Манипуляция

Эта библиотека включает в себя операции , чтобы манипулировать сопрограмм, которые приходят внутри таблицы coroutine. См §2.6 для общего описания сопрограммам.

coroutine.create (f)

Создает новый сопрограмму, с телом f. fДолжно быть функцией. Возвращает этот новый сопрограмму, объект с типом "thread".

coroutine.isyieldable ()

Возвращает истину, когда работает сопрограммная может дать.

Работающий сопрограммная является податливым, если это не основной поток, и это не внутри, не податливого функции C.

coroutine.resume (co [, val1, ···])

Начинает или продолжает выполнение сопрограммы co. Первый раз , когда вы возобновите сопрограмму, он начинает работать свое тело. Значенияval1, ... передаются как аргументы функции тела. Если сопрограммная принесло, resumeперезапускает его; значения val1, ... передаются как результаты от выхода.

Если сопрограммная работает без каких - либо ошибок, resumeвозвращает истинный плюс любые значения , переданные yield (при урожайности сопрограмм) или любые значения , возвращаемые функцией тела (когда сопрограммная заканчивается). Если есть какая - либо ошибка,resumeвозвращает ложь плюс сообщение об ошибке.

coroutine.running ()

Возвращает запущенный сопрограмму плюс логическое значение, правда, когда работает сопрограммная является основным.

coroutine.status (co)

Возвращает статус сопрограммы co, как строка: "running"если сопрограммная работает (то есть, он называется status), "suspended"если сопрограммная подвешен в вызове yield, или если он еще не начал работать еще, "normal"если сопрограммная активен , но не работает (то есть, он вновь другой сопрограмму); и "dead"если сопрограммная закончит свою функцию тела, или , если он остановлен с ошибкой.

coroutine.wrap (f)

Создает новый сопрограмму, с телом f. fДолжно быть функцией. Возвращает функцию , которая возобновит сопрограмму каждый раз , когда она вызывается. Любые аргументы передаются функции ведут себя как дополнительные аргументы resume. Возвращает те же значения , возвращаемыеresume, за исключением первого булево. В случае ошибки, распространяет сообщение об ошибке.

coroutine.yield (···)

Приостановка выполнение вызывающего подпрограммы. Любые аргументы yieldпередаются в качестве дополнительных результатов к resume.

6.3 - Модули

Библиотека пакет предоставляет основные возможности для загрузки модулей в Lua. Она экспортирует одну функцию непосредственно в глобальной среде: require. Все остальное экспортируется в таблице package.

require (modname)

Загрузка данного модуля. Функция начинает с просмотра в package.loadedтаблицу , чтобы определить , является ли modnameуже Загруженный.Если он есть, то requireвозвращается значение , хранящееся в package.loaded[modname]. В противном случае, он пытается найти загрузчик для модуля.

Чтобы найти загрузчик, requireруководствуется package.searchersпоследовательностью. Изменяя эту последовательность, мы можем изменить то, как requireвыглядит для модуля. Дальнейшее описание основано на конфигурации по умолчанию для package.searchers.

Первые requireзапросы package.preload[modname]. Если это имеет значение, то это значение (которое должно быть функцией) является загрузчиком. В противном случае requireпоиск загрузчика Lua , используя путь , хранящийся в package.path. Если это также терпит неудачу, он ищет загрузчик C , используя путь , хранящийся в package.cpath. Если это также не удается, он пытается собой все-в-одном загрузчик (смpackage.searchers).

После того, как загрузчик будет найден, requireвызывает загрузчик с двумя аргументами: modnameи дополнительное значение , зависящее от того,как он получил загрузчик. (Если загрузчик вышел из файла, это дополнительное значение имя файла.) Если загрузчик возвращает какое - либо значение не-ноль, requireприсваивает возвращаемое значение package.loaded[modname]. Если загрузчик не возвращает значение , не ноль и не назначено любое значение package.loaded[modname], а затем requireприсваивает верно к этому входу. В любом случае, requireвозвращает окончательное значение package.loaded[modname].

Если любая ошибка загрузки или запуска модуля, или если он не может найти загрузчик для модуля, то requireвыдает ошибку.

package.config

Строка, описывающая некоторые конфигурации времени компиляции пакетов. Эта строка представляет собой последовательность строк:

  • Первая строка это строка - разделитель каталогов. По умолчанию ' \' для Windows , и ' /' для всех других систем.
  • Вторая строка это символ , который отделяет шаблоны в пути. По умолчанию ' ;'.
  • Третья строка это строка , которая отмечает точки подстановки в шаблоне. По умолчанию ' ?'.
  • Четвертая строка является строкой , которая, в пути в Windows, заменяется каталогом исполняемого. По умолчанию ' !'.
  • Пятая строка представляет собой знак , чтобы игнорировать весь текст после него при создании luaopen_имени функции. По умолчанию ' -'.

package.cpath

Путь , используемый require для поиска погрузчика C.

Lua инициализирует путь C package.cpath таким же образом , он инициализирует путь Lua package.path, используя переменную окруженияLUA_CPATH_5_3 или переменной среды LUA_CPATH или путь по умолчанию , определенный в luaconf.h.

package.loaded

Таблица используется require для управления , какие модули уже загружены. Когда вам требуется модуль modname и package.loaded[modname] не является ложным, require просто возвращает значение , хранящееся там.

Эта переменная только ссылка на реальной таблице; присвоения этой переменной не изменяют таблицу , используемую require.

package.loadlib (libname, funcname)

Динамически связывает программу хоста с библиотекой C libname.

Если funcname это "*", то она связывает только с библиотекой, что делает символы , экспортируемые библиотекой , доступной для других динамически подключаемых библиотек. В противном случае, он ищет функцию  funcname внутри библиотеки и возвращает эту функцию как функцию C. Таким образом, funcname должны следовать за lua_CFunction прототип (см lua_CFunction).

Это функция низкого уровня. Это полностью обходит пакет и модуль системы. В отличие require, он не выполняет никакой путь поиска и автоматически не добавляет расширения. libnameДолжно быть полное имя файла библиотеки C, в том числе при необходимости путь и расширение. funcnameДолжно быть точное имя экспортируемой библиотеки C (что может зависеть на компилятор C и компоновщика используется).

Эта функция не поддерживается стандартной C. Таким образом , она доступна только на некоторых платформах (Windows, Linux, Mac OS X, Solaris, BSD, плюс другие системы Unix , которые поддерживают dlfcnстандарт).

package.path

Путь , используемый require для поиска загрузчика Lua.

При пуске, Lua инициализирует эту переменную со значением переменной окружения LUA_PATH_5_3 или переменной окружения LUA_PATHили с пути по умолчанию , определенной в luaconf.h, если эти переменные окружения не определены. Любой " ;;" в значении переменной среды заменяется на путь по умолчанию.

package.preload

Стол для хранения погрузчиков для конкретных модулей (см require).

Эта переменная только ссылка на реальной таблице; присвоения этой переменной не изменяют таблицу , используемую require.

package.searchers

Таблица используется require для управления , как для загрузки модулей.

Каждая запись в этой таблице является функция Искатель . При поиске модуля, require вызывает каждый из этих искателей в порядке возрастания, с именем модуля (аргумент дано require) в качестве единственного параметра. Функция может возвращать другую функцию (модульзагрузчика ) плюс дополнительное значение , которое будет передано в этот загрузчиком, или строка , объясняющая , почему он не нашел , что модуль (или ноль , если он не имеет ничего сказать).

Lua инициализирует эту таблицу с четырьмя поисковыми функциями.

Первый искатель просто ищет загрузчик в package.preloadтаблице.

Второй искатель ищет загрузчик в качестве библиотеки Lua, используя путь , хранящийся в package.path. Поиск выполняется , как описано в функции package.searchpath.

Третий искатель ищет загрузчик в качестве библиотеки C, используя путь задается переменной package.cpath. Опять же , поиск выполняется , как описано в функции package.searchpath. Например, если путь С является строка

     "./?.so;./?.dll;/usr/local/?/init.so"

поисковое устройство для модуля foo будет пытаться открыть файлы ./foo.so, ./foo.dllи /usr/local/foo/init.so, в таком порядке. После того,как он находит библиотеку C, этот поисковик сначала использует динамическую ссылку объекта , чтобы связать приложение с библиотекой. Затем он пытается найти функцию C внутри библиотеки , которые будут использоваться в качестве загрузчика. Название этой функции C является строка "luaopen_" сцепляются с копией имени модуля , где каждая точка заменяется знаком подчеркивания. Кроме того, если имя модуля содержит дефис, его суффикс после того, как (и в том числе) , первый дефис удаляется. Например, если имя модуля a.b.c-v2.1, имя функции будет luaopen_a_b_c.

Четвертый поисковое устройство пытается в загрузчик все-в-одном . Она ищет путь C для библиотеки для имени корневого данного модуля.Например, когда требует a.b.c, он будет искать библиотеки C для a. Если найден, он смотрит в него для открытой функции для субмодуля; В нашем примере, это было бы luaopen_a_b_c. С помощью этого объекта, пакет может упаковать несколько подмодулей C в одну библиотеку, причем каждый подмодуль сохраняя свою первоначальную открытую функцию.

Все поисковики кроме первого (преднагрузки) возвращают в качестве дополнительного значения имени файла , где был найден модуль, который возвращается package.searchpath. Первый поисковик не возвращает дополнительную ценность.

package.searchpath (name, path [, sep [, rep]])

Поиски данное name в данный path.

Путь представляет собой строку , содержащую последовательность шаблонов , разделенных точкой с запятой. Для каждого шаблона, функция заменяет каждый вопросительный знак (если таковые имеются) в шаблоне с копией , в name котором все вхождения sep (точка, по умолчанию) были заменены rep (разделитель каталогов системы, по умолчанию), а затем пытается открыть имя результирующего файла.

Например, если путь является строка

     "./?.lua;./?.lc;/usr/local/?/init.lua"

поиск имени foo.a попытается открыть файлы ./foo/a.lua, ./foo/a.lcи /usr/local/foo/a/init.lua, в таком порядке.

Возвращает полученное имя первого файла , который он может открыть в режиме чтения (после закрытия файла), или ноль плюс сообщение об ошибке , если он не достигает успеха. (Это сообщение об ошибке содержит список всех имен файлов он пытался открыть.)

6.4 - Манипуляция строками

Эта библиотека предоставляет общие функции для работы со строками, такие как поиск и извлечение подстроки, и сопоставления с образцом. При индексации строки в Lua, первый символ в позиции 1 (не в 0, как в C). Индексы могут быть отрицательными и интерпретируются как индексация в обратном направлении, от конца строки. Таким образом, последний символ находится в положении -1, и так далее.

Библиотека строка предоставляет все свои функции внутри таблицы string. Он также устанавливает метатаблицу для строк , где __index поле указывает на string таблицу. Таким образом, вы можете использовать строковые функции в объектно-ориентированном стиле. Например,string.byte(s,i) можно записать в виде s:byte(i).

Библиотека строка принимает один байт кодировки символов.

string.byte (s [, i [, j]])

Возвращает внутренние цифровые коды символов s[i], s[i+1], ..., s[j]. Значение по умолчанию для i1; Значение по умолчанию для jэто  i. Эти индексы корректируются , следуя тем же правилам функции string.sub.

Числовые коды не обязательно переносимы между платформами.

string.char (···)

Получает ноль или более целых чисел. Возвращает строку с длиной, равной количеству аргументов, в котором каждый символ имеет внутренний числовой код, равный его соответствующему аргументу.

Числовые коды не обязательно переносимы между платформами.

STRING.DUMP (FUNCTION [, STRIP])

Возвращает строку , содержащую двоичное представление (а двоичный чанка ) данной функции, так что позже load на этой строке возвращает копию функции (но с новыми upvalues). Если strip это истинное значение, бинарное представление не может включать в себя все отладить информацию о функции, для экономии места.

Функции с upvalues имеют только их количество сохраненных upvalues. Когда (пере) загружены, эти upvalues получать свежие экземпляры ,содержащие ноль . (Вы можете использовать библиотеку отладки для сериализации и перезагрузить upvalues функции в пути адекватной для ваших потребностей.)

STRING.FIND (S, PATTERN [, INIT [, PLAIN]])

Похоже на первом матче pattern(см §6.4.1 ) в строке s. Если он находит совпадение, а затем findвозвращает индексы  , s где это явление начинается и заканчивается; в противном случае, он возвращает ноль . Третий, необязательный числовой аргумент initуказывает , где , чтобы начать поиск; его значение по умолчанию равно 1 , и может быть отрицательным. Значение истинно в качестве четвертого, необязательный аргумент plainвыключает шаблон согласования объектов, поэтому функция делает простой "найти подстроку" операцию, без каких - либо символов в patternрассматриваемых магии. Обратите внимание , что если plainзадано, то initдолжно быть дано также.

Если образец имеет захваты, то в успешном матче захваченные значения также возвращаются, после двух индексов.

string.format (formatstring, ···)

Возвращает форматированную версию переменного числа аргументов следующего описания , данного в качестве первого аргумента (который должен быть строкой). Строка формата следует тем же правилам, что и функция ISO C sprintf. Единственное отличие заключается в том , что опции / модификаторы *, h, L, l, n, и p      не поддерживаются , и что есть дополнительный вариант, q.

Параметр форматирует строку в двойные кавычки, используя управляющие последовательности , когда это необходимо , чтобы убедиться , что он может безопасно быть прочитаны с помощью интерпретатора Lua. Например, вызов

     string.format('%q', 'a string with "quotes" and \n new line')

может привести строку:

     "a string with \"quotes\" and \
      new line"

Функции A, a, E, e, f, G, и gвсе ожидают число в качестве аргумента. Функции c, d, i, o, u, X, и xожидать целое число. Когда Lua собран с компилятором C89, опций Aи a(шестнадцатеричные поплавков) не поддерживает ни одного модификатора (флаги, ширина, длина).

Опция sожидает строку; если ее аргумент не является строкой, он преобразуется в одну , следуя тем же правилам tostring. Если опция имеет какой - либо модификатор (флаги, ширина, длина), аргумент строка не должна содержать вложенные нули.

string.gmatch (s, pattern)

Возвращает функцию итератора , что, каждый раз , когда она называется, возвращает следующий снимки из pattern (см §6.4.1 ) над строкой s. Еслиpatternне содержит захватов, то весь матч производится в каждом вызове.

В качестве примера, следующий цикл будет перебирать все слова из строки s, печать одной в каждой строке:

     s = "hello world from Lua"
     for w in string.gmatch(s, "%a+") do
       print(w)
     end

Следующий пример собирает все пары key=valueиз заданной строки в таблицу:

     t = {}
     s = "from=world, to=Lua"
     for k, v in string.gmatch(s, "(%w+)=(%w+)") do
       t[k] = v
     end

Для реализации этой функции, символ вставки ' ^' в начале шаблона не работает как якорь, так как это будет препятствовать итерации.

string.gsub (s, pattern, repl [, n])

Возвращает копию , s в которой все (или первые n, если данные) вхождений pattern(см §6.4.1 ) были заменены строкой замены , определенной спомощью repl, которая может быть строкой, таблицей или функцией. gsub Также возвращает , в качестве второго значения, то общее количество совпадений , которые произошли. Название gsub происходит от Global заместительная .

Если repl это строка, то ее значение используется для замены. Характер  %работает как экранирующий символ: любой последовательности , в repl формы , с D от 1 до 9, обозначает значения d -му зафиксированной подстроки. Последовательность означает всего матча. Последовательностьобозначает один  . %d%0%%%

Если repl это таблица, то таблица опрашивается для каждого матча, используя первый захват в качестве ключа.

Если repl есть функция, то эта функция вызывается каждый раз , когда матч происходит, со всеми зафиксированными подстроками , переданными вкачестве аргументов, в порядке.

В любом случае, если шаблон не содержит захватов, то он ведет себя так, как будто вся картина была внутри захвата.

Если значение , возвращенное запросом таблицы или вызовом функции является строка или число, то оно используется в качестве строки замены;в противном случае, если оно является ложным или ноль , то нет никакой замены (то есть, первоначальный матч хранится в строке).

Вот некоторые примеры:

 x = string.gsub("hello world", "(%w+)", "%1 %1")
 --> x="hello hello world world"
     
 x = string.gsub("hello world", "%w+", "%0 %0", 1)
 --> x="hello hello world"
     
 x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
 --> x="world hello Lua from"
     
 x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
 --> x="home = /home/roberto, user = roberto"
     
x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
       return load(s)()
     end)
 --> x="4+5 = 9"
     
 local t = {name="lua", version="5.3"}
 x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
 --> x="lua-5.3.tar.gz"

string.len (s)

Получает строку и возвращает его длину. Пустая строка ""имеет длину 0. Вложенные нули подсчитываются, поэтому "a\000bc\000" имеет длину 5.

string.lower (s)

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

string.match (s, pattern [, init])

Похоже на первый матч из pattern(см §6.4.1 ) в строке s. Если он находит, то matchвозвращает захваты из шаблона; в противном случае она возвращает ноль . Если pattern не содержит захватов, то весь матч возвращается. Третий, необязательный числовой аргумент init указывает, где , чтобы начать поиск; его значение по умолчанию равно 1 , и может быть отрицательным.

string.pack (fmt, v1, v2, ···)

Возвращает двоичную строку , содержащую значения v1, v2 и т.д. упакованы (то есть, серийные номера в двоичной форме) в соответствии со строкой формата fmt (см §6.4.2 ).

string.packsize (fmt)

Возвращает размер строки в результате string.pack с заданным форматом. Строка формата не может иметь параметры переменной длины ' s' или ' z' (см §6.4.2 ).

string.rep (s, n [, sep])

Возвращает строку , которая является конкатенацией nкопии строки , разделенных строкой sep. Значение по умолчанию для sep это пустая строка (то есть, не сепаратор). Возвращает пустую строку , если не будет положительным.

(Обратите внимание, что это очень легко исчерпать память вашего компьютера с помощью одного вызова этой функции.)

string.reverse (s)

Возвращает строку , которая является строкой sобратная.

string.sub (s, i [, j])

Возвращает подстроку , sкоторая начинается i и продолжается до тех пор j, и может быть отрицательным. Если jотсутствует, то предполагается равным -1 (такой же , как длина строки). В частности, вызов string.sub(s,1,j) возвращает префикс s с длиной j, и string.sub(s, -i) возвращает суффикс s с длиной i.

Если после перевода отрицательных индексов, составляет менее 1, то корректируется 1. Если больше , чем длина строки, она корректируется до этой длины. Если после этих поправок, больше j, функция возвращает пустую строку.

string.unpack (fmt, s [, pos])

Возвращает значения , упакованные в строке s(см string.pack) в соответствии со строкой формата fmt(см §6.4.2 ). Необязательное pos знаки , где ,чтобы начать чтение в s( по умолчанию 1). После того, как значения чтения, эта функция также возвращает индекс первого непрочитанного байта s.

STRING.UPPER (S)

Получает строку и возвращает копию этой строки со всеми строчными буквами измененных в верхний регистр. Все остальные символы остаются без изменений. Определение того, что строчная буква зависит от текущей локали.

6.4.1 - УЗОРЫ

Шаблоны в Lua описываются регулярными последовательностями, которые интерпретируются как шаблоны функциями сопоставления с образцомstring.find, string.gmatch, string.gsub, и string.match. В этом разделе описывается синтаксис и значение (то есть, что они совпадают) этих строк.

Характер Класс:

Класс символов используется для представления набора символов. Следующие комбинации разрешены в описании класса символов:

  • х : (где х не один из магических символов ^$()%.[]*+-? ) представляет символ х сам по себе.
  • .: (Точка) представляет все символы.
  • %a: Представляет все буквы.
  • %c: Представляет все управляющие символы.
  • %d: Представляет все цифры.
  • %g: Представляет все печатные символы , кроме пробелов.
  • %l: Представляет все буквы в нижнем регистре.
  • %p: Представляет все символы пунктуации.
  • %s: Представляет все символы пробела.
  • %u: Представляет все заглавные буквы.
  • %w: Представляет все алфавитно - цифровые символы.
  • %x: Представляет все шестнадцатеричные цифры.
  • %x: (Где х является любой не алфавитно-цифровой символ) представляет символ х . Это стандартный способ избежать магические символы.Любой не алфавитно-цифровой символ (включая все знаки препинания, даже не-магическая) может предшествовать ' %' , когда используется для представления себя в виде рисунка.
  • [set]: Представляет собой класс , который является объединением всех символов в наборе . Диапазон символов может быть определен, отделяя конечные символы диапазона, в порядке возрастания, с ' -'. Все классы х , описанные выше , также могут быть использованы вкачестве компонентов в наборе . Все остальные символы в наборе представляют себя. Например, (или ) представляет все алфавитно -цифровые символы плюс символ подчеркивания, представляет восьмеричные цифры, и представляет восьмеричные цифры плюс строчных букв плюс ' ' характер. %[%w_][_%w][0-7][0-7%l%-]-Вы можете поставить закрывающую квадратную скобку в наборе, позиционируя его в качестве первого символа в наборе. Вы можете поставить дефис в набор, позиционируя его в качестве первого или последнего символа в наборе. (Вы можете также использовать побег для обоих случаев.)Взаимодействие между диапазонами и классами не определен. Следовательно, образцы , подобные [%a-z]или [a-%%] не имеют никакого смысла.
  • [^set]: Представляет собой дополнение множества , где множество интерпретируется как выше.

Для всех классов , представляемых одиночными символами ( %a, %cи т.д.), соответствующая прописная буква представляет дополнение класса.Например, %Sпредставляет все символов без пробелов.

Определения письма, пространства и других групп символов зависит от текущей локали. В частности, класс [a-z] не может быть эквивалентен %l.

Шаблон товара:

Элемент модели может быть

  • Одиночный символьный класс, который соответствует любому одиночному символу в классе;
  • один символьный класс , сопровождаемый ' *', который соответствует нулю или большему количеству повторений символов в классе. Эти элементы повторения будут всегда соответствовать самой длинной возможной последовательности;
  • один символьный класс , сопровождаемый '+', который соответствует одному или большему количеству повторений символов в классе. Эти элементы повторения будут всегда соответствовать самой длинной возможной последовательности;
  • один символьный класс , сопровождаемый '-', который также соответствует нулю или большему количеству повторений символов в классе. В отличие от ' *', эти элементы повторения будут всегда соответствовать самой короткой возможной последовательности;
  • один символьный класс , сопровождаемый '?', что соответствует ноль или одно вхождение символа в классе. Это всегда соответствует одно вхождение , если это возможно;
  • %n, Для п от 1 до 9; Такой элемент соответствует подстроке , равной п -я захваченной строки (смотрите ниже);
  • %bxy, Где х и у являются два различных символа; Такой элемент соответствует строкам , которые начинаются с  х , заканчиваются  у , и где х иу являются сбалансированными . Это означает , что, если кто -то читает строку слева направо, подсчитывая +1 в течение х и -1 для у , окончание у является первым у которого счетчик равен 0. Например, элемент %b()соответствует выражениям со сбалансированными круглыми скобками ,
  • %f[set], А граница модели; Такой элемент соответствует пустой строке в любом положении, что следующий символ принадлежит установить и предыдущий символ не принадлежит установить . Набор комплект интерпретируется , как описано выше. Начало и конец субъекта обрабатываются , как если бы они были символом ' \0'.

Шаблон:

Образец представляет собой последовательность элементов образца. Знак вставки ' ^' в начале образца закрепляет соответствие в начале строки темы. А ' $' в конце образца закрепляет соответствие в конце строки текста. В других позициях ' ^' и ' $' не имеют никакого специального значения и представляются.

Захватывает:

Шаблон может содержать суб-шаблоны , заключенные в скобки; они описывают захваты . Когда матч завершается успешно, подстроки подчиненной строки , которые соответствуют снимки сохраняются ( захвачена ) для использования в будущем. Захватывает пронумерованы в соответствии с их левых скобок. Например, в схеме "(a*(.)%w(%s*))", часть соответствия строки "a*(.)%w(%s*)"хранится в качестве первого захвата (и ,следовательно , имеет номер 1); символ соответствия " ." зафиксировано с номером 2, и согласование части " %s*" имеет номер 3.

Как частный случай, пустой захват ()фиксирует текущее положение строки (число). Например, если применить шаблон "()aa()"на строке"flaaap", будет два Протоколируется: 3 и 5.

6.4.2 - ФОРМАТ СТРУНЫ ДЛЯ УПАКОВЫВАТЬ И РАСПАКОВЫВАТЬ

Первый аргумент string.pack, string.packsizeи string.unpack представляет собой формат строки, которая описывает структуру структуры создаваемого или читать.

Строка формата представляет собой последовательность параметров преобразования. Параметры преобразования следующие:

  • <: Устанавливает Little Endian
  • >: Устанавливает большой байтов
  • =: Устанавливает обратный порядок байт родной
  • ![n]: Устанавливает максимальное выравнивание к n ( по умолчанию является родным выравнивание)
  • b: Подписанный байт ( char)
  • B: Байт без знака ( char)
  • h: Знаковое short (родной размер)
  • H: Без знака short (родной размер)
  • l: Знаковое long (родной размер)
  • L: Без знака long (родной размер)
  • j:lua_Integer
  • J:lua_Unsigned
  • T:size_t (Родной размер)
  • i[n]: Подписанный int с байт ( по умолчанию является родным размер)
  • I[n]: Без знака int с байтов ( по умолчанию является родным размер)
  • f:float (Родной размер)
  • d:double (Родной размер)
  • n:lua_Number
  • cn: Фиксированного размера строка байтов
  • z: Нулевой завершённая строка
  • s[n]: Строка предшествует его длина кодируется как целое число без знака с байтов ( по умолчанию это size_t)
  • x: Один байт заполнения
  • Xop: Пустой элемент , который выравнивает в соответствии с вариантом op (который в противном случае игнорируется)
  • ' ': (Пустое пространство) игнорируется

(А " " означает необязательную интегральную цифру.) Для заполнения, за исключением помещений, а также конфигурации (опции " "), каждая опция соответствует аргументу (в ) или в результате (в ). [n]xX <=>!string.packstring.unpack

Для вариантов " ", " ", " " и " ", может быть любым целым числом от 1 до 16. Все интегральные параметры проверки переполнения, проверяет ,соответствует ли данное значение в данном размере, проверяет , соответствует ли считанное значение в Lua целое число.!nsninInnstring.packstring.unpack

Любая строка формата начинается , как будто с приставкой " !1=", то есть с максимальной выравнивания 1 (без выравнивания) и родной порядок байтов.

Выравнивание работает следующим образом : Для каждого варианта формат получает дополнительные прокладки , пока данные не начинается вточке смещения , который является кратным минимальной между размером опциона и максимальное выравнивание; этот минимум должен быть степенью 2. Варианты " c" и " z" не совпадают; Опция " s" следует выравнивание его исходного числа.

Вся обивка заполняется нулями с помощью string.pack (и игнорируется string.unpack).

6.5 - Поддержка UTF-8

Эта библиотека предоставляет базовую поддержку UTF-8 кодировке. Он предоставляет все свои функции внутри таблицы utf8. Эта библиотека не обеспечивает никакой поддержки Unicode, кроме обработки кодирования. Любая операция , которая требует значение символа, например, классификации символов, находится вне зоны ее действия.

Если не указано иное, все функции, которые ожидают позицию байта в качестве параметра предполагают, что данная позиция является либо начало последовательности байтов или один плюс длина строки текста. Как и в библиотеке струн, отрицательные индексы отсчитываются от конца строки.

UTF8.CHAR (···)

Получает ноль или более целых чисел, преобразует каждый из них в соответствующий UTF-8 последовательности байтов и возвращает строку с конкатенация всех этих последовательностей.

UTF8.CHARPATTERN

Шаблон (строка, а не функция) " [\0-\x7F\xC2-\xF4][\x80-\xBF]*" (см §6.4.1 ), что соответствует ровно один UTF-8 последовательности байтов, при условии , что субъект является допустимым UTF-8 строку.

UTF8.CODES (S)

Возвращает значения таким образом, что строительство

     for p, c in utf8.codes(s) do body end

Переберем все символы в строке s, с pтого положения (в байтах) и cточку кода каждого символа. Это вызывает ошибку , если она соответствует любой недопустимой последовательности байтов.

UTF8.CODEPOINT (S [, I [, J]])

Возвращает ( в виде кодовых значений целых чисел) из всех символов в s этом старте между байтовой позиции iи j(включительно). По умолчаниюiравно 1 и jесть i. Это вызывает ошибку , если она соответствует любой недопустимой последовательности байтов.

UTF8.LEN (S [, I [, J]])

Возвращает количество символов UTF-8 символов в строке , s которые начинаются между позициями iи j(оба включительно). По умолчаниюiравно 1 и j-1. Если он находит какой - либо недопустимую последовательность байтов, возвращает ложное значение плюс позицию первого некорректного байта.

UTF8.OFFSET (S, N [, I])

Возвращает позицию (в байтах) , где кодирование n-му характера s (считая от позиции iначинается). Отрицательное nполучает символы перед позиции i. По умолчанию iравен 1 , когда nнеотрицательна и в #s + 1противном случае, так что utf8.offset(s, -n)получает смещение n-го символа до конца строки. Если указанный символ не является ни в субъекте , ни сразу после ее окончания, функция возвращает NIL .

Как частный случай, когда n0 функция возвращает начало кодирования символа , который содержит i-ый байт s.

Эта функция предполагает , что sявляется допустимым UTF-8 строку.

6.6 - Таблица Манипуляция

Эта библиотека предоставляет общие функции для манипуляций таблицы. Он предоставляет все свои функции внутри таблицы table.

Помните , что всякий раз, когда операция требует длину таблицы, таблица должна быть правильная последовательность или иметь __lenметаметод (см §3.4.7 ). Все функции игнорируют нецифровых ключи в таблицах , приведенных в качестве аргументов.

TABLE.CONCAT (LIST [, SEP [, I [, J]]])

Принимая во внимание список , в котором все элементы строки или числа, возвращает строку list[i]..sep..list[i+1] ··· sep..list[j].Значение по умолчанию для sepэто пустая строка, то по умолчанию для i1, а значение по умолчанию для jэто #list. Если iбольше j, возвращает пустую строку.

TABLE.INSERT (LIST, [POS,] VALUE)

Вставки элемент valueв положении posв list, сдвигая вверх элементы list[pos], list[pos+1], ···, list[#list]. Значение по умолчанию дляposэто #list+1, так что вызов table.insert(t,x)вставляет xв конце списка t.

TABLE.MOVE (A1, F, E, T [,A2])

Перемещение элементов из таблицы a1в таблицу a2, выполняя эквивалентно следующему множественного присваивания: a2[t],··· = a1[f],···,a1[e]. По умолчанию a2это a1. Диапазон назначения может пересекаться с исходным диапазоном. Число элементов для перемещения должны соответствовать целому числу в Lua.

Возвращает таблицу назначения a2.

TABLE.PACK (···)

Возвращает новую таблицу со всеми параметрами , хранящимися в клавиши 1, 2 и т.д. , и с полем " n" с общим числом параметров. Обратите внимание , что результирующая таблица не может быть последовательностью.

TABLE.REMOVE (LIST [, POS])

Удаляет из listэлемента в позиции pos, возвращая значение удаляемого элемента. Когда posэто целое число между 1 и #listон сдвигается вниз элементы list[pos+1], list[pos+2], ···, list[#list] и удаляет элемент list[#list]; Индекс posтакже может быть равно 0 , если#listравно 0, или #list + 1; в тех случаях, функция стирает элемент list[pos].

Значение по умолчанию для posэто #list, так что вызов table.remove(l)удаляет последний элемент списка l.

table.sort (list [, comp])

Список Сортирует элементы в определенном порядке, в месте , от list[1]до list[#list]. Если compзадано, то оно должно быть функцией ,которая принимает два списка элементов и возвращает истину , когда первый элемент должен прийти перед вторым в окончательном порядке (так что, после того рода, i < jподразумевает not comp(list[j],list[i])). Если compне задан, то стандартный оператор Lua <используется вместо.

Обратите внимание , что compфункция должна определить строгий частичный порядок над элементами в списке; то есть, он должен быть асимметричным и транзитивным. В противном случае, не действует своего рода не может быть возможным.

Алгоритм сортировки не стабилен; то есть, элементы не сравнимы по данному порядку (например, одинаковые элементы) могут иметь свои относительные положения, измененные сорта.

table.unpack (list [, i [, j]])

Возвращает элементы из данного списка. Эта функция эквивалентна

     return list[i], list[i+1], ···, list[j]

По умолчанию равно 1 , и это # list.

6.7 - Математические функции

Эта библиотека предоставляет основные математические функции. Он предоставляет все свои функции и константы внутри таблицы math. Функции с примечанием " integer/float" дают целые результаты для целочисленных аргументов и всплывают результаты для поплавка (или смешанные) аргументы. Округление функции ( math.ceil, math.floor и math.modf) возвращают целое число , когда результат помещается в пределах целого или с плавающей точкой в противном случае.

math.abs (x)

Возвращает абсолютное значение x. (число / с плавающей точкой)

math.acos (x)

Возвращает арккосинус (в радианах).

math.asin (x)

Возвращает арксинус (в радианах).

math.atan (y [, x])

Возвращает арктангенс y/x (в радианах), но использует знаки обоих параметров , чтобы найти квадранта результата. (Она также обрабатывает правильно случай равна нулю.)

Значение по умолчанию для x1, так что вызов math.atan(y) возвращает арктангенс y.

math.ceil (x)

Возвращает наименьшее интегральное значение больше или равно x.

math.cos (x)

Возвращает косинус x(предположительно в радианах).

math.deg (x)

Преобразование угла xиз радиан в градусы.

math.exp (x)

Возвращает значение е х (где eесть основание натуральных логарифмов).

math.floor (x)

Возвращает наибольшее целочисленное значение , меньшее или равное x.

math.fmod (x, y)

Возвращает остаток от деления xна y что округляет фактор к нулю. (число / с плавающей точкой)

math.huge

Значение с плавающей точкой HUGE_VAL, значение больше , чем любое другое числовое значение.

math.log (x [, base])

Возвращает логарифм xв данной базе. По умолчанию baseявляется е (так , что функция возвращает натуральный логарифм x).

math.max (x, ···)

Возвращает аргумент с максимальным значением, в соответствии с оператором Lua <. (число / с плавающей точкой)

math.maxinteger

Целое число с максимальным значением для целого.

math.min (x, ···)

Возвращает аргумент с минимальным значением, в соответствии с оператором Lua <. (число / с плавающей точкой)

math.mininteger

Целое число с минимальным значением для целого.

math.modf (x)

Возвращает целую часть и дробную часть x. Его второй результат всегда поплавок.

math.pi

Величина pi .

math.rad (x)

Преобразование угла xиз градусов в радианы.

math.random ([m [, n]])

При вызове без аргументов, возвращает псевдо-случайное поплавок с равномерным распределением в диапазоне [0,1) . При вызове с двумя целыми числами и n, math.random возвращает псевдо-случайное число с равномерным распределением в диапазоне [т, п] . (Значение нм не может быть отрицательным и должны соответствовать целому числу в Lua.) Вызов  math.random(n) эквивалентно math.random(1,n).

Эта функция представляет собой интерфейс к функции генератора сошка псевдослучайной предоставленной С.

math.randomseed (x)

Наборы как "семя" для генератора псевдослучайных: равные семена производят одинаковые последовательности чисел.

math.sin (x)

Возвращает синус x(предположительно в радианах).

math.sqrt (x)

Возвращает квадратный корень x. (Вы можете также использовать выражение x^0.5для вычисления этого значения.)

math.tan (x)

Возвращает тангенс x(предположительно в радианах).

math.tointeger (x)

Если значение xконвертируется в целое число, возвращает это число. В противном случае, возвращает ноль .

math.type (x)

Возвращает "integer" если xэто целое число, "float" , если она является поплавок, или ноль , если не является числом.

math.ult (m, n)

Возвращает логическое значение, правда , если целое число ниже целого числа , когда они сравниваются как целые числа без знака.

6.8 - средства ввода и вывода

Библиотека ввода / вывода обеспечивает два различных стиля для обработки файлов. Первый из них использует неявные дескрипторы файлов; то есть, есть операции, чтобы установить входной файл по умолчанию и выходной файл по умолчанию, и все входные / выходные операции над этими файлами по умолчанию. Второй стиль использует явные дескрипторы файлов.

При использовании неявные дескрипторы файлов, все операции снабжены столом io. При использовании явных дескрипторов, операция io.open возвращает дескриптор файла, а затем все операции поставляются в качестве методов дескриптора файла.

В таблице io также обеспечивает три предустановленных дескрипторы файлов с их обычными значениями из C: io.stdin, io.stdout, и io.stderr. Библиотека ввода / вывода никогда не закрывает эти файлы.

Если не указано иное, все функции ввода / вывода возвращают ноль при неудаче (плюс сообщение об ошибке в качестве второго результата и системно-зависимый код ошибки в качестве третьего результата) и некоторое значение , отличное от нуля , в случае успеха. В системах без POSIX, вычисление сообщения об ошибке и код ошибки в случае возникновения ошибок может быть не поточно, поскольку они опираются на глобальную переменную C errno.

io.close ([file])

Эквивалент file:close(). Без file закрывает выходной файл по умолчанию.

io.flush ()

Эквивалент io.output():flush().

io.input ([file])

При вызове с именем файла, открывает именованный файл (в текстовом режиме), и устанавливает дескриптор в качестве файла ввода по умолчанию. При вызове с файловой ручкой, он просто устанавливает этот дескриптор файла в качестве файла ввода по умолчанию. При вызове без параметров, то она возвращает текущий файл ввода по умолчанию.

В случае ошибки эта функция вызывает ошибку, вместо возврата кода ошибки.

io.lines ([filename, ···])

Открывает заданное имя файла в режиме чтения и возвращает функцию итератора , которая работает как file:lines(···)над открываемого файла. Когда функция итератора обнаруживает конец файла, он не возвращает значения (для завершения цикла) и автоматически закрывает файл.

Вызов io.lines()(без имени файла) эквивалентно io.input():lines("*l"); то есть, он перебирает строк файла ввода по умолчанию. В этом случае он не закрывает файл , когда цикл завершается.

В случае ошибки эта функция вызывает ошибку, вместо возврата кода ошибки.

io.open (filename [, mode])

Эта функция открывает файл в режиме , указанном в строке mode. В случае успеха, он возвращает новый дескриптор файла.

modeСтрока может быть любой из следующих:

  • " r": Режим чтения (по умолчанию);
  • " w": Режим записи;
  • " a": Режим добавления;
  • " r+": Режим обновления, сохраняется все предыдущие данные;
  • " w+": Режим обновления, все ранее записанные данные уничтожаются;
  • " a+": Режим модификации, сохраняется предыдущие данные, запись разрешена только в конце файла.

mode Строка может также иметь ' b' в конце, который необходим в некоторых системах , чтобы открыть файл в двоичном режиме.

io.output ([file])

Аналогично io.input, но работает над выходным файла по умолчанию.

io.popen (prog [, mode])

Эта функция зависит от операционной системы и не доступен на всех платформах.

Запуск программы prog в отдельном процессе и возвращает дескриптор файла , который можно использовать для чтения данных из этой программы (если mode есть "r", по умолчанию) или записать данные в эту программу (если modeесть "w").

io.read (···)

Эквивалент io.input():read(···).

io.tmpfile ()

В случае успеха, возвращает дескриптор для временного файла. Этот файл был открыт в режиме обновления, и он автоматически удаляется при завершении программы.

io.type (obj)

Проверяет , является ли obj это правильный дескриптор файла. Возвращает строку , "file"если obj это открытый дескриптор файла, "closed file" если obj это замкнутый дескриптор файла, или ноль , если obj не дескриптор файла.

io.write (···)

Эквивалент io.output():write(···).

file:close ()

Закрывает file. Обратите внимание, что файлы автоматически закрываются , когда их ручки сборки мусора, но это занимает непредсказуемое количество времени , чтобы это произошло.

При закрытии дескриптора файла , созданного с помощью io.popen, file:close возвращает те же значения , возвращаемые os.execute.

file:flush ()

Сохраняет любые записанные данные file.

file:lines (···)

Возвращает функцию итератора , что, каждый раз , когда он называется, считывает файл в соответствии с заданными форматами. Если формат не задан, используется " l" по умолчанию. В качестве примера, строительство

     for c in file:lines(1) do body end

Переберем все символы файла, начиная с текущей позиции. В отличие io.lines, эта функция не закрывает файл , когда цикл завершается.

В случае ошибки эта функция вызывает ошибку, вместо возврата кода ошибки.

file:read (···)

Читает файл file, в соответствии с заданными форматами, которые определяют , что читать. Для каждого формата, функция возвращает строку или число с считанных символов или ноль , если он не может считывать данные с указанным форматом. (В этом последнем случае функция не читает последующие форматы.) При вызове без форматов, он использует формат по умолчанию , который считывает следующую строку (смотрите ниже).

Доступные форматы

  • "n": Читает цифру и возвращает его в качестве поплавка или целое число, после лексических конвенций Lua. (Цифра может иметь начальные пробелы и знак.) Этот формат всегда читает самую длинную последовательность ввода, является действительным префикс для числительное; если этот префикс не образует действительную цифру (например, пустая строка, " 0x" или " 3.4e-"), она отбрасывается и функция возвращает ноль .
  • "a": Читает весь файл, начиная с текущей позиции. На конце файла, возвращает пустую строку.
  • "l": Читает следующую строку , пропустив конец строки, возвращая ноль в конце файла. Это формат по умолчанию.
  • " L": Читает следующую строку с поддержанием конца-строки (если он присутствует), возвращая ноль в конце файла.
  • номер : читает строку до этого числа байтов, возвращая ноль в конце файла. Если numberравно нулю, то ничего не читает и возвращает пустую строку, или ноль на конце файла.

Форматы "l" и "L" следует использовать только для текстовых файлов.

file:seek ([whence [, offset]])

Устанавливает и получает позицию файла, измеряемую от начала файла, в позицию , заданной offsetплюс базы , указанной в строке whence, следующим образом :

  • "set": Базовая позиция 0 (начало файла);
  • "cur": База текущее положение;
  • "end": База конец файла;

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

Значение по умолчанию для whenceэто "cur", и offset равен 0. Таким образом, вызов file:seek() возвращает текущую позицию в файле, не изменяя его; вызов file:seek("set") устанавливает позицию на начало файла (и возвращает 0); и вызов file:seek("end") устанавливает позицию в конец файла и возвращает его размер.

file:setvbuf (mode [, size])

Устанавливает режим буферизации для выходного файла. Есть три доступных режима:

  • "no": Нет буферизации; результат любой операции вывода сразу появляется.
  • "full": Полная буферизация; операция вывода выполняется только тогда , когда буфер заполнен или когда вы явно flush файл (см io.flush).
  • "line": Линия буферизация; Выход в буфер до новой строки не выводится или есть любой вход со стороны некоторых специальных файлов (например, терминальное устройство).

В течение последних двух случаях, size определяет размер буфера в байтах. По умолчанию соответствующий размер.

file:write (···)

Записывает значение каждого из своих аргументов file. Аргументы должны быть строками или числами.

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

6.9 - Операционная система Услуги

Эта библиотека реализована с помощью таблицы os.

os.clock ()

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

os.date ([format [, time]])

Возвращает строку или таблицу , содержащую дату и время, отформатированные в соответствии с заданной строки format.

Если timeаргумент присутствует, это время , чтобы быть отформатированы (см os.time функцию для описания этого значения). В противном случае, dateформатирует текущее время.

Если formatначинается с ' !', то дата будет отформатирован во всеобщем скоординированном времени. После этого факультативного характера, если formatэто строка " *t", а затем date возвращает таблицу со следующими полями: year, month(1-12), day(1-31), hour(0-23), min(0-59), sec(0-61 ), wday (день недели, 1-7, в воскресенье 1), yday (день года, 1-366), и isdst (летнее флаг, логическое значение). Это последнее поле может отсутствовать , если информация не доступна.

Если format не " *t", а затем date возвращает дату в виде строки, отформатированной в соответствии с теми же правилами, что и функции ISO C strftime.

При вызове без аргументов, dateвозвращает приемлемое представление даты и времени , которое зависит от хост - системы и от текущего региона.(Более конкретно, os.date() эквивалентно os.date("%c").)

На системах , отличных от POSIX, эта функция может быть не поточно из - за своей зависимости от функции C gmtime и функции C localtime.

os.difftime (t2, t1)

Возвращает разницу в секундах, время от t1ко времени t2 (где времена это значения , возвращаемые os.time). В POSIX, Windows, и некоторых других системах, это значение точно - . t2t1

os.execute ([command])

Эта функция эквивалентна функции ISO C system. Она проходит command быть выполнена оболочкой операционной системы. Ее первый результат верно , если команда завершается успешно, или ноль в противном случае. После этого первого результата функция возвращает строку с последующим числом, следующим образом:

  • " exit": Команда завершается нормально; следующее число является статус выхода команды.
  • " signal": Команда была прекращена сигналом; следующее число является сигналом , который расторг команду.

При вызове без command, os.execute возвращает логическое значение, которое истинно, если оболочка доступна.

os.exit ([code [, close]])

Вызывает функцию ISO C, exit чтобы прервать программу хоста. Если code это верно, то возвращается статус EXIT_SUCCESS; если code это ложь , возвращаемый статус EXIT_FAILURE; если code это число, то возвращается статус это число. Значение по умолчанию для code это верно .

Если необязательный второй аргумент close верно, то закрывает состояние Lua перед выходом.

os.getenv (varname)

Возвращает значение переменной окружения процесса varname, или ноль , если переменная не определена.

os.remove (filename)

Удаляет файл (или пустой каталог, в системах POSIX) с заданным именем. Если эта функция завершается ошибкой, она возвращает ноль , плюс строку , содержащую описание ошибки и код ошибки.

os.rename (oldname, newname)

Переименовывает файл или каталог с именем oldnameв newname. Если эта функция завершается ошибкой, она возвращает ноль , плюс строку , содержащую описание ошибки и код ошибки.

os.setlocale (locale [, category])

Устанавливает текущий язык программы. locale Является зависимым от системы строка , определяющая локаль, categoryфакультативная строка ,описывающая которую категорию изменить: "all", "collate", "ctype", "monetary", "numeric", или "time"; категория по умолчанию "all". Функция возвращает имя нового языкового стандарта, или ноль , если запрос не может быть выполнен.

Если localeэто пустая строка, текущая локаль установлена на определенном реализацией родного языка. Если localeэто строка " C", текущая локаль устанавливается в стандартной C локали.

При вызове с нуля в качестве первого аргумента, эта функция возвращает только имя текущей локали для данной категории.

Эта функция может быть не поточно из - за своей зависимости от функции C setlocale.

os.time ([table])

Возвращает текущее время при вызове без аргументов, или время , представляющее местную дату и время , указанные в данной таблице. Эта таблица должна иметь поля year, month и day, и может иметь поля hour ( по умолчанию 12), min ( по умолчанию 0), sec ( по умолчанию 0), и isdst ( поумолчанию ноль ). Другие поля игнорируются. Для описания этих полей см os.date функцию.

Значения в этих полях не должны находиться внутри их допустимых диапазонов. Например, если sec-10, это означает , -10 секунд от времени ,указанного в других областях; если hour1000, то это означает +1000 часов от времени , указанного в других областях.

Возвращаемое значение представляет собой число, значение которого зависит от вашей системы. В POSIX, Windows, и некоторых других систем, это число подсчитывает количество секунд , прошедших с некоторого заданного времени начала ( "эпохи"). В других системах, значение не задано, а число , возвращенное timeможет быть использован только в качестве аргумента os.date и os.difftime.

os.tmpname ()

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

В системах POSIX, эта функция также создает файл с этим именем, чтобы избежать угрозы безопасности. (Кто-то может создать файл с неправильными разрешениями в то время между получением имени и создания файла.) Вы все еще должны открыть файл, чтобы использовать его и удалить его (даже если вы не используете его).

Когда это возможно, вы можете предпочесть использовать io.tmpfile, который автоматически удаляет файл при завершении программы.

6.10 - отладочная библиотека

Эта библиотека обеспечивает функциональные возможности интерфейса отладки ( §4.9 ) к программам Lua. Вы должны проявлять осторожность при использовании этой библиотеки. Некоторые из его функций нарушают основные предположения о Lua коде (например, что локальные переменные функции не могут быть доступны извне, что USERDATA метатаблицы не может быть изменен с помощью Lua кода, что программы Lua не крах) и , следовательно , может поставить под угрозу в противном случае безопасный код. Кроме того, некоторые функции в этой библиотеке может быть медленным.

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

debug.debug ()

Вводит интерактивный режим с пользователем, запуская каждую строку , которую пользователь вводит. Используя простые команды и другие средства отладки, пользователь может проверить глобальные и локальные переменные, изменять их значения, вычислять выражения, и так далее.Строка , содержащая только слово contзаканчивает эту функцию, так что абонент продолжает его выполнение.

Обратите внимание , что команды для debug.debug не лексически вложен в любой функции и поэтому не имеют прямого доступа к локальным переменным.

debug.gethook ([thread])

Возвращает текущие параметры крючку нити, как три значения: текущая функция крюк, текущая маска крюк, и текущий счетчик крюк (как установлено debug.sethook функции).

DEBUG.GETINFO ([THREAD,] F [, WHAT])

Возвращает таблицу с информацией о функции. Вы можете дать функцию прямо или вы можете дать номер в качестве значения f, что означает ,что функция работает на уровне fстека вызовов данной теме: Уровень 0 текущая функция ( getinfo сама); Уровень 1 является функцией , которая называется getinfo (для хвостовых вызовов, которые не рассчитывают на стеке , кроме); и так далее. Если fэто число больше , чем число активных функций, а затем getinfo возвращает ноль .

Возвращенный таблица может содержать все поля , возвращаемые lua_getinfo, со строкой , what описывающей , какие поля для заполнения. По умолчанию what, чтобы получить всю имеющуюся информацию, за исключением таблицы валидных строк. Если присутствует параметр 'f' добавляет поле с именем func с самой функции. Если присутствует параметр ' L' добавляет поле с именем activelines с таблицей валидных строк.

Например, выражение debug.getinfo(1,"n").name возвращает имя для текущей функции, если разумное имя можно найти, и выражение debug.getinfo(print) возвращает таблицу со всей доступной информацией о print функции.

debug.getlocal ([thread,] f, local)

Эта функция возвращает имя и значение локальной переменной с индексом local функции на уровне стека. Эта функция обращается не только явные локальные переменные, но и параметры, временные файлы и т.д.

Первый параметр или локальная переменная имеет индекс 1, и так далее, после того, что они были объявлены в коде, считая только те переменные, которые активны в текущей области видимости функции. Отрицательные индексы относятся к параметрам vararg; -1 Является первым параметром vararg. Функция возвращает ноль , если не существует ни одной переменной с данным индексом, и выдает ошибку при вызове с уровнем вне диапазона. (Вы можете позвонить , debug.getinfoчтобы проверить , действительно ли уровень.)

Имена переменных , начинающиеся с ' (' (открывающей скобкой) представляют собой переменные без известных имен (внутренние переменные ,такие как контрольные переменные цикла и переменные из сохраненных кусков без отладочной информации).

Параметр может также быть функцией. В этом случае getlocal возвращает только имя параметров функции.

debug.getmetatable (value)

Возвращает метатаблицу данного value или ноль , если он не имеет метатаблицу.

debug.getregistry ()

Возвращает таблицу реестра (см §4.5 ).

debug.getupvalue (f, up)

Эта функция возвращает имя и значение с индексом повышать стоимость upфункции f. Функция возвращает ноль , если нет повышать стоимость с данным индексом.

Имена переменных , начинающиеся с ' (' (открывающей скобкой) представляют собой переменные без известных имен (переменных из сохраненных кусков без отладочной информации).

debug.getuservalue (u)

Возвращает значение Lua , связанный с u. Если uне UserData, возвращает ноль .

debug.sethook ([thread,] hook, mask [, count])

Устанавливает заданную функцию в виде крючка. Строка mask и номер countописывают , когда крюк будет называться. Строка маски может иметь любую комбинацию из следующих символов, с заданным значением:

  • ' c': Ловушка вызывается каждый раз , когда Lua вызывает функцию;
  • ' r': Ловушка вызывается каждый раз , когда Lua возвращается из функции;
  • ' l': Ловушка вызывается каждый раз , когда Lua входит в новую строку кода.

Кроме того, с count отличным от нуля, то хук вызывается также после каждой count инструкции.

При вызове без аргументов, debug.sethook выключает крючок.

Когда хук вызывается, его первым параметром является строка , описывающая событие , которое вызвало его вызов: "call"(или "tail call"),"return", "line"и "count". Для линии событий, крюк также получает новый номер строки в качестве второго параметра. Внутри крючок, вы можете позвонить getinfo с 2 -го уровня , чтобы получить больше информации о функции беговой (уровень 0 является getinfo функция, а уровень 1 функция крюк).

debug.setlocal ([thread,] level, local, value)

Эта функция присваивает значение value локальной переменной с индексом local функции на уровне level стека. Функция возвращает ноль , если нет локальной переменной с данным индексом, и выдает ошибку при вызове с level вне диапазона. (Вы можете позвонить , getinfo чтобы проверить , является ли уровень.) В противном случае она возвращает имя локальной переменной.

См debug.getlocal для получения дополнительной информации о переменных индексов и названий.

debug.setmetatable (value, table)

Устанавливает метатаблицу для данного value к данному table (которое может быть нулевым ). Возвращает value.

debug.setupvalue (f, up, value)

Эта функция присваивает значение valueк повышать стоимость с индексом upфункции f. Функция возвращает ноль , если нет повышать стоимость с данным индексом. В противном случае, она возвращает имя повышать стоимость.

debug.setuservalue (udata, value)

Устанавливает заданный в value качестве значения Lua , связанного к данному udata. udataДолжен быть полным UserData.

Возвращает udata.

debug.traceback ([thread,] [message [, level]])

Если messageприсутствует , но не является ни строкой , ни ноль , эта функция возвращает message без дальнейшей обработки. В противном случае она возвращает строку с TRACEBACK стека вызовов. Опциональная message строка добавляется в начале TRACEBACK. Необязательноеlevelчисло указывает , на каком уровне , чтобы начать трассировку ( по умолчанию равен 1, то функция вызова traceback).

debug.upvalueid (f, n)

Возвращает уникальный идентификатор (в виде светло - UserData) для повышать стоимость пронумерованных n от данной функции.

Эти уникальные идентификаторы позволяют программе проверить, могут ли различные замыканиями акций upvalues. Lua затворы, которые разделяют (повышать стоимость, то есть, что получить доступ к той же внешней локальной переменной) будет возвращать одинаковые идентификаторы для этих индексов повышать стоимость.

debug.upvaluejoin (f1, n1, f2, n2)

Сделать n1-я повышать стоимость закрытия Lua f1 относятся к n2-му повышать стоимость закрытия Lua f2.

Дале --->

Translate »