为什么 _VERSION 返回“Luau”而不是“Lua 5.1”以及为什么 += 运算符突然起作用?

Joh*_*Doe 4 lua

我发现 _VERSION 返回"Luau"而不是"Lua 5.1". 我也发现了continue+=操作员在工作

print(_VERSION) -- Luau
value = 0
value += 1
print(value) -- Doesn't return a syntax error
for k, v in ipairs({1, 2, 3, 4}) do
  if k == 1 then
    continue -- This works?
  end
  print(v)
end
Run Code Online (Sandbox Code Playgroud)

印刷

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

我也搞乱了它并意识到类型注释是有效的。

function foo(x: number, y: string): boolean
    local k: string = y:rep(x)
    return k == "a"
end
Run Code Online (Sandbox Code Playgroud)

不会引发语法错误。我还发现table.find,table.create和functionmath.clamp一样在 Lua 5.4 中被删除了typeof

print(0b10)我还实现了在 Lua 5.1 中返回二进制文字2,但在 Lua 5.4 中抛出错误,同时print(1_000)在 Lua 5.1 中返回 1000,但在 Lua 5.4 中不起作用

为什么这些突然在 Lua 5.1 上可以工作了?没想到它能在 Lua 5.1 上工作当我切换到 Lua 5.4 时,_VERSION"Lua 5.4"相反返回并且continue不起作用并被typeof删除(How do I check types in Lua 5.4?)。这是怎么回事?为什么 Lua 5.4 删除了 += 、 continue 运算符以及为什么 _VERSION 在 Lua 5.1 中返回 Luau ?

Gre*_*een 5

很简单:这不是Lua 5.1。

它是Luau,一种源自 Lua 5.1 并向后兼容的语言。这就是为什么您通常的 5.1 代码可以工作,以及为什么您可以使用一些新功能。Luau 由 Roblox 维护。其源代码在 MIT 许可下发布。

至于 Lua 5.4,请参阅其参考手册以了解对它的期望。