4.1 – 栈
Lua 使用一个 虚拟栈 来和 C 互传值。栈上的的每个元素都是一个 Lua 值 (nil,数字,字符串,等等)。
无论何时 Lua 调用 C,被调用的函数都得到一个新的栈,这个栈独立于 C 函数本身的栈,也独立于之前的 Lua 栈。它里面包含了 Lua 传递给 C 函数的所有参数,而 C 函数则把要返回的结果放入这个栈以返回给调用者 (参见 lua_CFunction
)。
方便起见,所有针对栈的 API 查询操作都不严格遵循栈的操作规则。而是可以用一个 索引 来指向栈上的任何元素:正的索引指的是栈上的绝对位置(从1开始);负的索引则指从栈顶开始的偏移量。展开来说,如果堆栈有 n 个元素,那么索引 1 表示第一个元素(也就是最先被压栈的元素)而索引 n 则指最后一个元素;索引 -1 也是指最后一个元素(即栈顶的元素), 索引 -n 是指第一个元素。