调试库中主要的自省函数是 getinfo,该函数的第一个参数可以是一个函数或一个栈层次。当为某个函数 foo 调用 debug.getinfo(foo) 时,该函数会返回一个包含与该函数有关的一些数据的表。这个表可能具有以下字段。
- source: 该字段用于说明函数定义的位置。如果函数定义在一个字符串中(通过调用 load),那么 source 就是这个字符串;如果函数定义在一个文件中,那么 source 就是使用 @ 作为前缀的文件名。
- short_src: 该字段是 source 的精简版本(最多 60 个字符),对于错误信息十分有用。
- linedefined: 该字段是该函数定义在源码中最后一行的行号。
- what: 该字段是该函数的一个适当的名称,例如保存该函数的全局变量的名称。
- namewhat: 用于说明上一个字段的含义,可能是“global”、“local”、“method”、“field” 或 “”(空字符串)。空字符串表示 Lua 语言找不到该函数的名称。
- nups: 该字段是该函数的上值的个数。
- nparams: 该字段是该函数的参数个数。
- isvararg: 该字段表明该函数是否为可变长参数函数(一个布尔值)。
- activeline:该字段是一个包含该函数所有活跃行的集合。活跃行(active line)是指除空行和只包含注释的行外的其他行。
- func:该字段是该函数本身。
网友评论