OpenComputers/Стандартные библиотеки Lua
В OpenComputers доступны многие функции стандартных библиотек Lua. Однако некоторые из них могут быть ограничены, или переопределены.
Подробнее о стандартных библиотеках Lua вы можете узнать в официальной документации здесь.
Различия
Базовые функции
Функции базовой библиотеки Lua:
collectgarbage
— Не доступна.
dofile
иloadfile
— Переопределены для загрузки из файловой системы OpenComputers (см. Filesystem API).
load
— Может использоваться только для загрузки текста. Загрузка байткода может быть разрешена в настройках мода, однако не рекомендуется, так как представляет собой большую угрозу безопасности.
print
— Переопределена для вывода на консоль (см. Term API)
Сопрограммы (Coroutine)
Набор функций по управлению сопрограммами coroutine
доступен в моде без особенных изменений.
Примечание: функции coroutine.resume
и coroutine.yield
переопределены в моде с учетом того, что программа прерывает свое выполнение, если она не отвечает долгое время (точное значение смотрите в настройках мода).
Модули
Функции работы с модулями package
переопределены в моде OpenComputer. Однако должны работать аналогично, за исключением следующих функций:
package.config
— не используется
package.cpath
— не используется
package.loadlib
— не переопределена
Последние две не используются в связи с тем, что невозможна загрузка кода C из OpenComputers.
Операции со строками
Оригинальная библиотека для работы со строками string
доступна без изменений.
Примечание: функции GPU API (а также term.write
и print
) полностью совместимы со строками в формате UTF-8. Кроме того, для облегчения работы с форматом Unicode, OpenComputers предоставляет библиотеку Unicode API.
Операции с таблицами
Оригинальная библиотека для работы с таблицами table
доступна без изменений.
Математические функции
Оригинальная библиотека математических функций math
доступна с незначительными изменениями:
math.random
использует отдельный экземпляр классаjava.util.Random
для каждого потока Lua.
math.randomseed
применяется к своему экземпляруjava.util.Random
соответственно.
Битовые операции
Оригинальная библиотека битовых операций bit32
доступна без изменений.
Операции ввода/вывода
Функции библиотеки io
переопределены для работы с консолью и файловой системой OpenComputers.
Для стандартного ввода/вывода используются функции term.read
/ term.write
.
Функции по большей части функционально эквивалентны оригинальным. Они могут возвращать отличающиеся сообщения ошибки.
io.popen
— не доступна.
io.open
— не поддерживает режим+
. Поддерживаемые режимы:r
,w
,a
,rb
,wb
иab
. Побитовый режим чтения файлов поддерживает загрузку строк в формате UTF-8.
io.stdin
— читает данные с помощьюterm.read
.
io.stdout
— пишет используяterm.write
.
io.stderr
— также пишет используяterm.write
, однако делает это красным цветом (если цвета поддерживаются монитором/видеокартой компьютера).
io.read
— поддерживает режим"n"
для ввода данных типа number вместо string. Для этого"n"
должен передаваться в функцию io.read как аргумент.
Функции операционной системы
Функции библиотеки os
частично переопределены.
os.clock
— возвращает приблизительное время работы CPU. Это не то же самое, что время работы компьютера (см. функциюcomputer.uptime
из Computer API).
os.date
— использует внутриигровую дату. Поддерживает различные форматы.
os.execute
— переопределена для запуска программ с помощьюshell.execute
. См. Shell API
os.exit
— создает событие ошибки, для того чтобы закрыть текущую сопрограмму.
os.setenv
— добавляет переменные окружения шелла.
os.remove
— алиас кfilesystem.remove
.
os.rename
— алиас кfilesystem.rename
.
os.setlocale
— не доступна.
os.time
— переопределена, выводит внутриигровое время, начиная с создания мира. Учтите, что время указывается во внутриигровых "секундах". Чтобы получить число тактов домножте это значение на1000/60/60
(в одном дне 24000 тактов) и вычтите 6000. Это число (6000) взято не случайным образом. Новая игра в Minecraft начинается в "полдень", который и считается точкой отсчета времени (ноль).
os.tmpname
переопределена для генерации нового (неиспользуемого) имени в каталоге/tmp
.
Кроме того добавлена одна новая функция:
os.sleep(seconds: number)
— приостанавливает скрипт на указанный промежуток времени. При этом сигналы (и события) по прежнему обрабатываются, когда компьютер приостановлен. События "копятся" в очереди событий и будут обработаны, когда компьютер возобновит работу.
См. также функции Computer API.
Отладка
Доступна только функция debug.traceback
.