Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 提取功能体_Lua - Fatal编程技术网

Lua 提取功能体

Lua 提取功能体,lua,Lua,如何提取函数体(作为字符串)?例如,我调用C函数,从堆栈中提取函数,检查类型是否为LUA\u TFUNCTION,我需要做什么才能得到它的主体?当函数位于堆栈上时,它已经编译过了。您可以尝试做的最好的事情就是执行一个lua\u转储,然后调试库就可以做到这一点。Lua C API没有它,您需要为此调用Lua函数。您可以使用字符串参数“S”调用,然后检查Lua_调试结构的“源”成员。如果该字符串以“@”开头,则它是一个文件名,如果需要源文件,则需要重新读取该文件(Lua仅以增量方式读取该文件以加载函

如何提取函数体(作为字符串)?例如,我调用C函数,从堆栈中提取函数,检查类型是否为
LUA\u TFUNCTION
,我需要做什么才能得到它的主体?

当函数位于堆栈上时,它已经编译过了。您可以尝试做的最好的事情就是执行一个
lua\u转储
,然后调试库就可以做到这一点。Lua C API没有它,您需要为此调用Lua函数。

您可以使用字符串参数“S”调用
,然后检查Lua_调试结构的“源”成员。如果该字符串以“@”开头,则它是一个文件名,如果需要源文件,则需要重新读取该文件(Lua仅以增量方式读取该文件以加载函数,而从不将其保存为字符串)。否则,它的内容将是作为定义函数的块加载的字符串


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

-1所有调试库函数都是根据API函数定义的,例如。