c - 逐行执行Lua脚本时检测代码块

标签 c lua block resume

这听起来像是一个愚蠢的问题,但我看不到任何地方提到这个特定问题。基本上:

我想逐行执行一个Lua脚本,主要是为了能够随时随地暂停/恢复执行。我所做的很简单:使用 luaL_loadbuffer() 加载一个 block ,然后发出 lua_pcall()。

问题是......我怎样才能正确检测 Lua block 以便原子地执行它们?

例如,假设脚本中有一个函数——通过上述方法逐行执行文件,我似乎无法正确识别该函数,结果加载了它的内容并一一调用。

我可以想象一种解决方案是手动处理一个堆栈,在堆栈中我可以在脚本中识别我可以识别的控制关键字(“function”、“if”、“do”等)及其相应的“end”子句 if我找到嵌套 block 。一旦我按下最后的“结束”,我就调用了整个 block ,但这听起来简直糟透了。肯定有更好的方法来做到这一点。

希望它有意义,谢谢!

最佳答案

请看Lua coroutines为脚本游戏实体实现该功能。思路是yield您提到的 sleep() 和 waitforevent() 例程中的协程,然后是 resume稍后(例如在超时或事件发生后)。

关于c - 逐行执行Lua脚本时检测代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399063/

相关文章:

c - C中的随机访问函数问题

c - 有没有办法对两个字符串进行标记并并行处理标记?

oop - Lua & OO,如何从另一个方法访问方法?

objective-c - iPhone 上的 Lua-Objective-C 桥

iOS GCD 与异步 block 同步

ruby - 在 Ruby 中为 Enumerable mixin 实现 `each`

c - 有没有办法让进程知道 dtrace 已附加?

lua - pandoc-lua 无法加载系统范围的模块

html - 使用 <blockquote> 进行大引号

c - 为什么我得到 "format ' %s' expects argument of type 'char *' but ...."error here?