在线Lua - IDE、编辑器、编译器、解释器

使用参考解释器的WebAssembly构建即时运行Lua 5.4脚本。非常适合学习Lua或测试游戏和配置脚本。

Lua 5.4 (wasmoon) · 在浏览器中运行,代码绝不会发送到我们的服务器。
main.luaLua
输出

            
        
Ctrl/⌘ + Enter 运行

在线 Lua 编译器的功能(IDE、编辑器 & 解释器)

免费在线编写、运行和测试 Lua 代码。本页面集在线 Lua IDE、代码编辑器、编译器和解释器于一体:输入代码,点击“运行”,立即查看输出。一切都在浏览器中运行,无需安装,也无需注册账号。

  • 即时运行代码: Lua 5.4 (wasmoon),首次加载后一秒内即可输出结果。
  • 代码编辑器: 语法高亮、行号、括号匹配和自动补全括号。
  • 清晰的错误提示: 错误信息和警告会显示在输出面板中,与在您自己的电脑上一样。
  • 全屏: Ctrl/⌘ + Shift + F,可调节字号,支持并排或堆叠布局,面板大小可调。
  • 自动保存: 代码保存在您的浏览器中;可一键下载为 main.lua 或复制。
  • 放心尝试: 时间限制和“停止”按钮可终止无限循环。
  • 私密: Lua 运行时在您的设备上运行,代码绝不会被上传。
  • 深色模式 以及键盘快捷键:Ctrl/⌘ + Enter 运行代码。
  • 免费: 无需注册,不限使用次数。

学习其他编程语言

如何使用 Lua 在线编译器

  1. 在编辑器中编写或粘贴 Lua 脚本。重置示例可恢复初始代码。
  2. 点击运行,或使用 Ctrl + Enter(Mac 上为 ⌘ + Enter)。
  3. 传给 print() 的所有内容都会显示在输出面板中。与标准解释器一样,多个参数之间以制表符分隔,nil 会打印为 nil。运行时错误和语法错误会连同行号一起高亮显示。
  4. 选择 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 在线编译器同样完全在您的浏览器中运行。

更新于

已复制到剪贴板