Lua 提取功能体
如何提取函数体(作为字符串)?例如,我调用C函数,从堆栈中提取函数,检查类型是否为Lua 提取功能体,lua,Lua,如何提取函数体(作为字符串)?例如,我调用C函数,从堆栈中提取函数,检查类型是否为LUA\u TFUNCTION,我需要做什么才能得到它的主体?当函数位于堆栈上时,它已经编译过了。您可以尝试做的最好的事情就是执行一个lua\u转储,然后调试库就可以做到这一点。Lua C API没有它,您需要为此调用Lua函数。您可以使用字符串参数“S”调用,然后检查Lua_调试结构的“源”成员。如果该字符串以“@”开头,则它是一个文件名,如果需要源文件,则需要重新读取该文件(Lua仅以增量方式读取该文件以加载函
LUA\u TFUNCTION
,我需要做什么才能得到它的主体?当函数位于堆栈上时,它已经编译过了。您可以尝试做的最好的事情就是执行一个lua\u转储
,然后调试库就可以做到这一点。Lua C API没有它,您需要为此调用Lua函数。您可以使用字符串参数“S”调用
,然后检查Lua_调试结构的“源”成员。如果该字符串以“@”开头,则它是一个文件名,如果需要源文件,则需要重新读取该文件(Lua仅以增量方式读取该文件以加载函数,而从不将其保存为字符串)。否则,它的内容将是作为定义函数的块加载的字符串
请注意,在任何一种情况下,返回的
source
都将是定义相关函数的整个块。您可以使用结构中定义的其他字段将字符串缩小到只包含该函数:但是,请注意,这并不能保证您能够加载该字符串以获得相同的行为(例如,函数定义可能引用在外部范围中定义的变量).-1所有调试库函数都是根据API函数定义的,例如。