Skip to content

4.1 - 栈

Lua使用虚拟栈来与C代码相互传递值。栈中的每个元素都表示一个Lua值(nil、数字、字符串……等等)。API中的函数可以通过接收到的状态机参数来访问栈。

当Lua调用C代码时,所调用的函数会得到一个新的栈,其独立于之前的和仍在活跃的C函数的栈。这个堆栈最初包含C函数的所需参数,C函数可以在这里存储临时Lua值,并且必须将结果都压入栈中以返回给调用方(参见lua_CFunction)。

为了方便,API中的大多数查询操作都不必严格遵循的栈规则。相反,它们可以使用索引来访问栈中的任意元素:正数索引表示栈中的绝对位置,以栈底1开始增长;负数索引表示相对于栈顶的位置。具体来说,如果栈有n个元素,那么索引1表示其第一个元素(即这个元素是第一个被压入栈的)而索引n表示最后一个元素;索引-1也表示最后一个元素(即栈顶的元素)而索引-n则表示第一个元素。