首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Roblox 2009 Lua:获取Loadstring的错误

Roblox 2009 Lua:获取Loadstring的错误
EN

Stack Overflow用户
提问于 2018-06-21 06:04:27
回答 1查看 486关注 0票数 1

我已经做了几个小时的2009脚本构建器,但我不知道如何让它打印错误。如果我使用print(loadstring("a")),它会打印到roblox输出nil [string "s"]:1: '=' expected near '<eof>'中,==为nil。我想要得到的是它在: '=' expected near '<eof>'末尾报告的错误,类型是nil,所以我不知道如何得到它。如果有人能帮上忙,我将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-21 07:06:44

请参阅Lua5.1手册,该手册将为您提供load文档

如果有错误,...返回nil加上错误消息。

Lua通常会将错误消息作为第二个返回值返回:

代码语言:javascript
复制
local f, err = loadstring(mycode)
if not f then
    print("There was an error: `" .. err .. "`")
end

err从错误发生的位置开始,这无助地将输入引用到loadstring

例如,对于输入代码"hello there",错误是

代码语言:javascript
复制
[string "hello there"]:1: '=' expected near 'there'

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

对于"hello\there",错误是

代码语言:javascript
复制
[string "hello..."]:2: '=' expected near 'there'

对于"helloooooooooooooooooooooooooooooooooooooooooooooooooooooo there",错误是

代码语言:javascript
复制
[string "helloooooooooooooooooooooooooooooooooooooooooooooooooooooo ther..."]:1: '=' expected near 'there'

如果您确定脚本的前63个字符/第一行中没有"]:,则只需搜索该序列即可找到它的终止位置:

代码语言:javascript
复制
local location, message = err:match('^(%[string ".*"%]:%d+:%s+)(.*)$')

例如,如果您的代码是"hello\"]:1: there",那么这是不正确的,因为您可能想要解决这个问题。

解决这个问题的最简单方法是从引用的第一行中夺走用户控制权:在代码前面加上您自己的第一行(如果您向用户显示错误,请确保调整错误的行号:)

代码语言:javascript
复制
local f, err = loadstring("--code\n" .. mycode)
print(err)

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

代码语言:javascript
复制
[string "--code..."]:
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50957714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档