Roblox 2009 Lua:获取 Loadstring 的错误

Roblox 2009 Lua: Get Loadstring's error

我制作 2009 脚本生成器已经几个小时了,但我不知道如何让它打印错误。如果我这样做 print(loadstring("a")),它会打印到 roblox 输出 nil [string "s"]:1: '=' expected near '<eof>',== nil。我想得到的是它最后报的错误: '=' expected near '<eof>',类型type为nil,所以我不知道如何得到它。如果有人可以提供帮助,将不胜感激!

请参阅 Lua 5.1 手册,它将指向 load 的文档:

If there [are] errors, ... returns nil plus the error message.

通常 Lua 到 return 错误消息作为第二个 return 值:

local f, err = loadstring(mycode)
if not f then
    print("There was an error: `" .. err .. "`")
end

err 开头,其中 发生了错误,它无益地引用了 loadstring.

的输入

例如输入代码"hello there",错误为

[string "hello there"]:1: '=' expected near 'there'

Lua 似乎在第一个换行符或 63 个字符处截断引号,以较小者为准:

对于"hello\there",错误是

[string "hello..."]:2: '=' expected near 'there'

对于"helloooooooooooooooooooooooooooooooooooooooooooooooooooooo there",错误是

[string "helloooooooooooooooooooooooooooooooooooooooooooooooooooooo ther..."]:1: '=' expected near 'there'

如果您确定脚本的前 63 characters/first 行中没有 "]:,您可以搜索该序列以找到它停止的位置:

local location, message = err:match('^(%[string ".*"%]:%d+:%s+)(.*)$')

例如,如果您的代码是 "hello\"]:1: there",您可能想要解决这个问题。

解决它的最简单方法是让用户控制远离引用的第一行:在代码前面加上你自己的第一行,这很好(如果出现错误,请确保调整错误的行号您将其显示给用户:)

local f, err = loadstring("--code\n" .. mycode)
print(err)

现在错误消息应该总是开始

[string "--code..."]: