反射(Reflection)
反射是程序用来检查和修改其自身某些部分的能力。Lua这样的动态语言支持几种反射机制:环境允许运行时观察全局变量;诸如type和pairs这样的函数允许运行时见检查和遍历未知的数据结构。诸如load和require这样的函数允许程序在自身中追加代码或更新代码。不过仍有缺失的部分,如程序不能检查局部变量,开发人员不能跟踪代码执行,函数也不知道是被谁调用的。调试库(debug library)弥补了这些损失。
调试库由两类函数组成:自省函数(introspective function) 和 钩子(hook)。 自省函数允许我们检查一个正在运行的程序中的活动函数的栈,当前正在执行的代码行,局部变量名称和值。钩子则允许我们跟踪一个程序的执行。
使用调试库必须小心谨慎。首先,调式库中的某些功能的性能不高。其次,调试库会打破一些语言的固有规则。
自省机制
调式库中的主要自省函数是getinfo,该函数的第一个参数可以是一个韩素或一个栈层次。当为某个函数foo调用**debug.getinfo(foo)**时,该函数会返回一个包含于该函数有关的一些数据的表。
这个表主要有以下字段:
source: 该字段用于说明函数定义的位置。
short_srt: 该字段是so