是否可以在不执行lua脚本的情况下检查它是否包含错误?我有休闲代码:
if(luaL_loadbuffer(L, data, size, name))
{
fprintf (stderr, "%s", lua_tostring (L, -1));
lua_pop (L, 1);
}
if(lua_pcall(L, 0, 0, 0))
{
fprintf (stderr, "%s", lua_tostring (L, -1));
lua_pop (L, 1);
}
但是,如果脚本包含错误,它将首先通过if并被执行。我想知道它在加载时是否包含错误,而不是在执行时包含错误。这可能吗?
最佳答案
(这原本是对对Krtek问题的第一条评论的答复,但我在那里空间有限,说实话,它可以很好地解决这个问题。)
函数本质上是值,因此,命名函数实际上是该名称的变量。根据变量的定义,变量可以在执行脚本时更改。 hell ,有人可能不小心重新定义了其中一项功能。那不好吗?总结一下我的想法:根据脚本,传递的参数和/或您所说的那些预定义功能的实际实现(例如,一个可能未设置自身或其他功能),除非您愿意缩小您的一些需求。对于您要寻找的东西,Lua太动态了。 :)
如果要进行完美无瑕的测试,请执行以下操作:创建一个虚拟环境,并在所有环境中都准备就绪,并查看其是否在崩溃过程中的任何地方崩溃(加载,执行等)。这基本上是一种单元测试,因此非常繁重。
如果您想通过基本检查来查看脚本是否具有有效的语法:Krtek已经给出了答案。我非常确定(但不是100%),lua等效于loadfile
或loadstring
,而相应的C等效项是尝试对代码进行lua_load()
,每个代码都会将可读脚本转换为字节码,而在您之前您已经需要这样做实际上可以在正常情况下执行代码。 (并且,如果其中包含函数定义,则稍后需要执行这些定义,以使其中的代码得以执行。)
但是,这些是您在实际发生错误之前可以选择的范围。 Lua是一种非常动态的语言,当您想证明正确性时,强项就是弱点。一个完美的解决方案涉及太多的变量。
关于lua脚本错误检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5249709/