Table of Contents

非标准Lua库

大部分Lua标准库都是可用的,尽管其中的一些只是部分可用或是重新实现的——这意味着其行为可能会略有不同。请参阅Lua 5.3 手册(英文)中关于标准库的文档。

对“重新实现”的描述是基于OpenOS的,其他自定义的操作系统可能会有不同的细节。

本页将尝试列出所有与标准库的差异

基本函数

基础库中的原函数是可用的,但有以下不同:

协程操作

coroutine库内的原函数均可用,并没有可见的差异。

注意,暴露给用户使用的coroutine.resumecoroutine.yield实现是封装过的,它们负责中止在一定时间(见配置文件)后还没有yield的代码,还可以区分系统产生的yield和用户产生的yield(系统会产生“bubble”,例如在关闭命令行或调用组件 API 时)。然而这不应该从用户代码层面被注意到。如果被注意到了,应该被认为是bug。

模块

模块部分已针对OpenComputer重新实现。效果应该跟原本的相同,但它没有以下函数:

后两者不存在是因为OpenComputer不能加载C语言代码。

require是在全局范围内可用的方法,也就是说,你不需要加载任何模块就能访问它,你可以在脚本的第一行就使用它(这是很常见的用法)。它的工作依赖于package库,因此我们就在这里对它进行介绍。

字符串操作

string库内的原函数均可用,没有任何变化。

注意,GPU API中的函数工作于UTF-8字符串环境下,进而term.writeprint也一样。为了帮助你处理UTF-8字符串,我们准备了一个额外的库,即Unicode API

表操作

table库内的原函数均可用,没有任何变化。

数学函数

math 库中的原函数均可用,但有一点改动。

位操作

bit32库内的原函数均可用,没有任何变化。

输入输出功能

io库中的原函数都被很大程度上重新实现了,它们工作在已挂载的文件系统组件上。标准输入通过io.read(以及term.readio.stdin:read)读取。 标准输出通过io.write(以及term.writeio.stdout:writeprint)写入。标准错误通过io.stderr:write写入。

大多数情况下,它们应该与标准Lua实现在功能上等价。也许它们返回的错误信息与原版Lua 不同,但大多数情况下原版Lua使用的也是基于平台的C异常库,因此将这些用于程序逻辑无论如何都不是一个好主意。

snippet.lua
io.stdin:read() -- 从stdin中读取
io.read() -- 也是从stdin中读取
term.read() -- 也是从stdin中读取
snippet.lua
io.stdout:write("写入stdout")
io.write("也是写入stdout")
term.write("也是写入stdout,但如果字符串超过屏幕分辨率允许的宽度,就会自动换行")
snippet.lua
io.stderr:write("向stderr写入错误信息")

操作系统功能

os库内的原函数已经被部分重新实现。

额外增加了一个函数:

此类别的一些新函数可以在computer(电脑) API中找到。

调试

只实现了debug.tracebackdebug.getinfo(1.5.9起),仅限被动信息。

目录