提取功能体

时间:2011-06-30 16:42:03

标签: lua

如何提取函数体(作为字符串)?例如,我调用C函数,从堆栈中提取函数,检查类型是否为LUA_TFUNCTION以及我需要做些什么来获取它的主体?

3 个答案:

答案 0 :(得分:2)

当函数在堆栈上时,它已经被编译。您可以尝试做的最好的事情是lua_dump,然后是decode the bytecode

答案 1 :(得分:2)

您可以使用字符串参数“S”调用lua_getinfo,然后检查lua_Debug结构的“source”成员。如果该字符串以'@'开头,那么它就是一个文件名,如果你想要源代码,你需要重新读取文件(Lua只是逐步读取文件来加载函数,而不是将它保存为字符串)。否则,其内容将是作为定义函数的块加载的字符串。

请注意,在任何一种情况下,返回的source定义相关函数的整个块。您可以使用结构中定义的其他字段将字符串缩小到仅该函数:但是,请注意,这不能保证您能够将该字符串重新加载以获得相同的行为(函数定义可能例如,参考外部范围中定义的变量。

答案 2 :(得分:-2)

Debug库可以做到这一点。 Lua C API没有它,你想为此目的调用一个Lua函数。