lua脚本错误检查

标签 lua

是否可以在不执行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等效于loadfileloadstring,而相应的C等效项是尝试对代码进行lua_load(),每个代码都会将可读脚本转换为字节码,而在您之前您已经需要这样做实际上可以在正常情况下执行代码。 (并且,如果其中包含函数定义,则稍后需要执行这些定义,以使其中的代码得以执行。)

但是,这些是您在实际发生错误之前可以选择的范围。 Lua是一种非常动态的语言,当您想证明正确性时,强项就是弱点。一个完美的解决方案涉及太多的变量。

关于lua脚本错误检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5249709/

相关文章:

lua - 为什么将Lua设计为生成中间操作码?

c# - 将 C# 字节数组传递给 LuaInterface

string - Lua 字符串模式 - 更短的代码

string - Lua:获取参数的字面名称

c# - 使用 MoonSharp Lua 访问结构

lua - _VERSION 是 Lua 5.1 中唯一剩下的全局变量吗?

lua - torch Lua : Why is my gradient descent not optimizing the error?

nginx - 你如何通过 Nginx 上的 LUA 将 POST 和 GET 传递给脚本?

java - 在 OSX 10.5 上使用 LuaJava 的链接器错误

lua - Tarantool:index.indexName:pairs 调用中的限制/偏移