这听起来像是一个愚蠢的问题,但我看不到任何地方提到这个特定问题。基本上:
我想逐行执行 Lua 脚本,主要是为了能够随时随地暂停/恢复执行。我所做的很简单:用 luaL_loadbuffer() 加载一个块,然后发出一个 lua_pcall()。
事情是......我怎样才能正确检测 Lua 块以便原子地执行它们?
例如,假设脚本中有一个函数——通过使用上述方法逐行执行文件,我似乎无法正确识别该函数,因此它的内容被加载并调用一个。
我可以想象一个解决方案是手动处理一个堆栈,我在其中推送我可以在脚本中识别的控制关键字(“function”、“if”、“do”等)以及它们相应的“end”子句(如果我发现嵌套)块。一旦我推动最后的“结束”,我就会调用整个街区,但这听起来很糟糕。当然,必须有更好的方法来做到这一点。
希望它有一些意义,谢谢!