为什么 _VERSION 返回 "Luau" 而不是 "Lua 5.1",+= 操作符为什么会突然起作用?

我发现 _VERSION 返回 "Luau" 而不是 "Lua 5.1"。我还发现 continue+= 操作符也能正常工作。

print(_VERSION) -- Luau
value = 0
value += 1
print(value) -- 不返回语法错误
for k, v in ipairs({1, 2, 3, 4}) do
  if k == 1 then
    continue -- 这也可以正常工作?
  end
  print(v)
end

结果为:

1
2
3
4

我还试验了一下发现类型注解也是可以正常工作的。

function foo(x: number, y: string): boolean
    local k: string = y:rep(x)
    return k == "a"
end

不会产生语法错误。我还发现在 Lua 5.4 中 table.findtable.createmath.clamp 被移除了,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 被移除了(我该如何在 Lua 5.4 中检查类型)。出现了什么问题?为什么 Lua 5.4 移除了 +=、continue 操作符,为什么在 Lua 5.1 中 _VERSION 返回 Luau?

点赞
用户4567755
用户4567755

这就是简单的事情:它不是Lua 5.1。

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

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

2020-08-25 22:21:30