- •4.2 Среда и составные части
- •4.3 Типы и тэги
- •4.4 Язык
- •4.4.1 Лексические соглашения в языке
- •4.4.2 Приведение
- •4.4.3 Корректировка
- •4.4.4 Инструкции
- •4.4.4.1 Блоки
- •4.4.4.2 Присваивания
- •4.4.4.3 Структуры управления
- •4.4.4.4 Инструкция For
- •4.4.4.5 Обращения к функции как инструкции
- •4.4.4.6 Локальные объявления
- •4.4.5 Выражения
- •4.4.5.1 Базисные выражения
- •4.4.5.2 Арифметические операторы
- •4.4.5.3 Реляционные операторы
- •4.4.5.4 Логические операторы
- •4.4.5.5 Объединения
- •4.4.5.6 Старшинство
- •4.4.5.7 Конструкторы таблиц
- •4.4.5.8 Вызовы функций
- •4.4.5.9 Определение функций
- •4.4.6 Зона видимости и Upvalues
- •4.4.7 Обработка ошибок
- •4.4.8 Методы тэгов
- •4.5.1 Состояния
- •4.5.2 Стек и индексы
- •4.5.3 Манипуляции со стеком
- •4.5.4 Запросы к стеку
- •4.5.5 Помещение значений в стек
- •4.5.6 Уборка мусора
- •4.5.7 Userdata и тэги
- •4.5.8 Выполнение Lua-кода
- •4.5.9 Управление глобальными переменными в Lua
- •4.5.10 Управление таблицами в Lua
- •4.5.11 Использование таблиц как массивов
- •4.5.12 Вызов функций Lua
- •4.5.13 Определение функций c
- •4.5.14 Ссылки к Lua-объектам
- •4.5.15 Системный реестр
- •4.6 Стандартные библиотеки
- •4.6.1 Базисные функции
- •4.6.2 Строковые манипуляции в Lua
- •Шаблоны Символьный класс:
- •Элемент образца:
- •Шаблоны:
- •Сборы данных:
- •4.6.3 Математические функции
- •4.6.4 Средства ввода-вывода
- •4.6.5 Средства системы
- •4.7 Интерфейс отладки
- •4.7.1 Информация стека и функций
- •4.7.2 Управление локальными переменными
- •4.7.3 Обработчики прерываний
- •4.7.4 Рефлексивный интерфейс отладки
- •4.8 Lua в автономном режиме
- •Изменения в библиотеках
- •Изменения в api
- •4.12 Полный синтаксис Lua
- •4.13 Lua: интерпретатор языка Lua Синтаксис
- •Описание
- •4.14.1 Что Вы получаете
- •4.14.2 Проблемы и некоторые решения
- •4.14.3 Разделяемые библиотеки
- •4.14.4 Установка на Windows или Macintosh
Шаблоны:
Шаблон представляет собой последовательность элементов образца. Циркумфлекс (^) в начале образца закрепляет соответствие в начале подчиненной строки. $ в конце образца закрепляет соответствие в конце подчиненной строки. В других позициях ^ и $ не имеют никакого специального значения и представляются как есть.
Сборы данных:
Образец может содержать подобразцы, включенные в круглые скобки, они описывают сборы данных. Когда соответствие выполнено, подстроки подчиненной строки, которые соответствуют сборам данных, сохранены для будущего использования. Сборы данных пронумерованы согласно их левым круглым скобкам. Например, в образце "(a*(.)%w(%s*))", часть соответствия строки "a*(.)%w(%s*)" сохранена как первый сбор данных (а, следовательно, имеет номер 1), символьное соответствие . зафиксировано с номером 2, а часть, соответствующая %s*, конечно, имеет номер 3.
Образец не может содержать вложенные ноли. Используйте вместо этого %z.
4.6.3 Математические функции
Эта библиотека предоставляет интерфейс к некоторым функциям стандартной математической библиотеки 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]. Границы всегда входят в диапазон.
4.6.4 Средства ввода-вывода
Все операции ввода-вывода в Lua реализованы через два дескриптора файла, по одному на ввод и вывод. Эти дескрипторы сохранены в двух глобальных переменных Lua, названных _INPUT и _OUTPUT. Глобальные переменные _STDIN, _STDOUT и _STDERR инициализированы с описателями файлов для stdin, stdout и stderr. Первоначально Initially, _INPUT=_STDIN и _OUTPUT=_STDOUT.
Дескриптор файла представляет собой объект userdata, содержащий поток файла (FILE*) с отличительным тэгом, созданным библиотекой ввода-вывода (I/O).
Если иное не установлено, все функции I/O возвращают nil на сбое и некоторое значение, отличное от nil, при успехе.
openfile (filename, mode)
Эта функция открывает файл в режиме, определенном в строке mode. Это возвращает новый дескриптор файла или, в случае ошибок, nil плюс строку, описывающую ошибку. Эта функция не изменяет _INPUT или _OUTPUT.
Строка mode может быть любой из следующего списка:
r
Режим чтения.
w
Режим записи.
a
Режим добавления к концу.
r+
Режим обновления, все ранее записанные данные сохраняются.
w+
Режим обновления, все ранее записанные данные уничтожаются.
a+
Режим модификации, предыдущие данные сохраняются, запись позволяется только в конце файла.
Строка mode может также иметь в конце b, что необходимо в некоторых системах, чтобы открыть файл в двоичном режиме. Эта строка аналогична той, что используется в стандартной функции C fopen.
closefile (handle)
Эта функция закрывает файл. Это не изменяет _INPUT или _OUTPUT.
readfrom (filename)
Эта функция может быть вызвана двумя путями. Когда она вызвана с именем файла, открывает именованный файл, устанавливает дескриптор как значение _INPUT и возвращает это значение. Это не закрывает текущий файл input. При вызове без параметров, она закрывает файл _INPUT и восстанавливает stdin как значение _INPUT. Если эта функция где-то не сработала, она возвращает nil плюс строку описания.
Если filename начинается с символа трубопровода |, открывается поточный ввод через функцию popen. Не все системы его выполняют. Кроме того, число файлов, которые могут быть открыты в то же самое время, обычно ограничивается и зависит от системы.
writeto (filename)
Эта функция может быть вызвана двумя путями. Когда она вызвана с именем файла, открывает именованный файл, устанавливает дескриптор как значение _OUTPUT и возвращает это значение. Это не закрывает текущий выходной файл. Обратите внимание, что если файл уже существует, то он будет полностью уничтожен этой операцией. Когда функция вызвана без параметров, она закрывает файл _OUTPUT и восстанавливает stdout как значение _OUTPUT. В случае ошибки функция возвращает nil плюс строку, описывающую ошибку.
Если filename начинается с символа трубопровода |, открывается поточный ввод через функцию popen. Не все системы его выполняют. Кроме того, число файлов, которые могут быть открыты в то же самое время, обычно ограничивается и зависит от системы.
appendto (filename)
Открывает файл, именованный filename и устанавливает это как значение _OUTPUT. В отличие от операции writeto, эта функция не стирает предыдущее содержание файла, вместо этого все, что пишется в файл, будет конкатенировано к концу. Если эта функция получила сбой, она вернет nil плюс строку, описывающую ошибку.
remove (filename)
Удаляет файл с данным именем. Если эта функция получила сбой, она вернет nil плюс строку с описанием ошибки.
rename (name1, name2)
Переименовывает файл name1 в name2. Если эта функция получила сбой, она вернет nil плюс строку с описанием ошибки.
flush ([filehandle])
Сохраняет любые записанные данные в заданный файл. Если filehandle не определен, то flush сбросит на диск все открытые файлы. Если эта функция получила сбой, она вернет nil плюс строку с описанием ошибки.
seek (filehandle [, whence] [, offset])
Получает позицию файла, измеряемую в байтах от начала файла, и меняет ее на позицию, данную смещением offset плюс ядром, определенным как строка whence следующим образом:
set
Позиция 0 (начало файла).
cur
Текущая позиция.
end
Конец файла.
В случае успеха функция seek возвращает конечную позицию файла, измеряемую в байтах от начала файла. Если эта функция получила сбой, она вернет nil плюс строку, описывающую эту ошибку.
Значение по умолчанию для whence равно cur, а для offset это 0. Следовательно, вызов seek(file) возвращает текущую позицию файла без того, чтобы изменить это. Вызов seek(file, "set") устанавливает позицию на начало файла (и возвращает 0), а seek(file, "end") устанавливает позицию в конец файла и возвращает его размер.
tmpname ()
Возвращает строку с именем файла, которое может безопасно использоваться для временного файла. Файл должен быть явно открыт перед использованием и удален, когда больше не нужен.
read ([filehandle,] format1, ...)
Читает файл _INPUT или filehandle, если этот параметр задан, согласно данным форматам, которые определяют, что читать. Для каждого формата, функция возвращает строку или число с прочитанными данными или nil, если не может читать данные с определенным форматом. Когда вызвана без форматов, эта функция использует заданный по умолчанию формат, который читает следующую строку.
Доступные форматы такие:
*n
Читает число. Это единственный формат, который возвращает число вместо строки.
*l
Читает следующую строку (обходя концы строк) или nil в конце файла. Это и есть заданный по умолчанию формат.
*a
Читает целый файл, начинающийся в текущей позиции. На конце файла, возвращает пустую строку.
*w
Читает следующее слово (максимальная последовательность символов без пробелов. Пробелы обходит в случае необходимости. Замечу, что под пробелом здесь понимается не только собственно пробел, но и спецсимволы. В конце файла функция вернет nil.
Число
Читает строку до указанного числа символов в длину или nil на конце файла.
write ([filehandle, ] value1, ...)
Пишет значение каждого из параметров в файл _OUTPUT или в filehandle, если этот параметр задан. Параметры должны быть строками или числами. Чтобы писать другие значения, используйте tostring или format перед write. Если эта функция нарвалась на ошибку, она вернет nil и строку с описанием данной ошибки.
