我有一个简单的程序在lua文件上运行luaL_dofile
(我们称之为'script.lua',然后检查错误,然后再次运行文件,依此类推。依此类推。指向程序发现错误,它将其写入日志然后终止。问题是,script.lua获取用户的输入,然后使用loadstring
运行该字符串。我不想发生什么(以及什么确实发生了)loadstring
创建错误(因为用户输入的代码不正确),然后C ++程序发现此错误并终止程序。在我看来,防止C ++程序发现错误的最佳方法是从堆栈中删除它,但我不知道如何从script.lua访问lua堆栈。
答案 0 :(得分:2)
显然问题是我一直都很傻。我更改了我的代码,以便它检测到错误然后打印它,而不是使用assert
script.lua的示例:
这不能正常工作:
local input = io.read()
assert(loadstring(input))()
这确实有效:
local input = io.read()
output, error = loadstring(input)
if (output == nil) then
print (error)
else
output()
end