如何使用 Lua 在线编译器
- 在编辑器中编写或粘贴 Lua 脚本。重置示例可恢复初始代码。
- 点击运行,或使用 Ctrl + Enter(Mac 上为 ⌘ + Enter)。
- 传给
print()的所有内容都会显示在输出面板中。与标准解释器一样,多个参数之间以制表符分隔,nil会打印为nil。运行时错误和语法错误会连同行号一起高亮显示。 - 选择 5 秒、15 秒或 60 秒的时间限制。运行时间过长的脚本会被自动停止,点击停止则会立即终止。
Lua 运行时很小,远不到 1 MB,因此页面几乎可以立即开始运行。使用复制或 main.lua 来保存您的脚本。
您的脚本在浏览器内的 Web Worker 中运行,不会被上传,也不会存储在我们的服务器上。编辑器只会把您最近的代码记在浏览器的本地存储中,其他地方都不会保存。
支持哪些功能
该编译器通过 wasmoon 运行 Lua 5.4,wasmoon 是用 C 编写的 Lua 参考解释器的 WebAssembly 版本。您的代码由真正的 Lua 执行,而不是转换成 JavaScript 后执行。
- Lua 5.4 语言:整数和浮点子类型、整除(
//)、位运算符、goto,以及<const>和<close>局部变量属性。 - 标准库:
string(包括 Lua 模式和string.format)、table、math、utf8和coroutine。 - 闭包、元表和协程,让您可以练习面向对象和生成器风格的 Lua。
限制:
- 请用
print()输出。输出是从print捕获的,所以请使用它,而不是io.write。 - 没有标准输入、网络访问和真实文件。请把测试数据直接写在脚本中。
- 没有 C 模块和 LuaRocks。只有编辑器中的纯 Lua 代码可以运行。
- 每次运行都会使用全新的 Lua 状态,因此上次运行留下的全局变量会被清除。
Lua 速查
local Account = {}
Account.__index = Account
function Account.new(owner, balance)
return setmetatable({ owner = owner, balance = balance or 0 }, Account)
end
function Account:deposit(v)
self.balance = self.balance + v
end
local acc = Account.new("Ada")
acc:deposit(50)
print(acc.owner, acc.balance) --> Ada 50
for word in ("one two three"):gmatch("%a+") do
print(#word, word:upper())
end
print(7 // 2, 7 / 2) --> 3 3.5
| 任务 | 语法 |
|---|---|
| 局部变量 | local x = 10 |
| 连接字符串 | "a" .. "b" |
| 字符串或列表的长度 | #t |
| 不等于 | a ~= b |
| 数值循环 | for i = 1, 10, 2 do ... end |
| 遍历列表 / 表 | for i, v in ipairs(t) / for k, v in pairs(t) |
| 格式化数字 | string.format("%.2f", n) |
小技巧
- Lua 的数组从索引 1 开始,而不是 0;而且
#只对没有nil空洞的序列才可靠。 - 请用
local声明变量。不加的话,变量就是全局的,速度更慢,也是常见的 bug 来源。 - 只有
nil和false为假。在 Lua 中,0和空字符串都为真。 - Lua 模式看起来像正则表达式,但更简单,使用
%而不是反斜杠,例如%d+。如需其他语言中完整的正则表达式,请试试正则表达式测试。
pairs 遍历它;对于由字符串和数字组成的列表,可以使用 table.concat(list, ", ")。直接把表传给 print(t) 不会列出它的内容。常见问题
这里使用的是哪个 Lua 版本?
Lua 5.4。运行 print(_VERSION) 即可确认。为 Lua 5.3 编写的代码几乎总能原样运行,而 Lua 5.1 或 LuaJIT 的代码可能需要小幅修改,例如把 unpack 换成 table.unpack。
我可以在这里测试 Roblox 或 LÖVE 脚本吗?
您可以测试纯 Lua 逻辑,例如函数、表、字符串处理和数学运算。Roblox 服务等引擎 API(Roblox 使用自己的 Luau 方言)或 LÖVE 的 love.* 函数在这里并不存在。
为什么 io.read 不起作用?
该编译器没有交互式标准输入。请在脚本开头把测试值定义为变量。
还能在线运行哪些其他语言?
Python 在线编译器和 Ruby 在线编译器同样完全在您的浏览器中运行。
更新于