4.1.2 - 有效与可接受的索引
API中的任何函数都只接收有效索引或可接受索引。
有效索引指的是引用位置存储的是可更改的Lua值。它包括从1到栈顶(1 ≤ abs(index) ≤ top)的栈索引以及伪索引 pseudo-indice,伪索引表示一些C代码可以访问但是不在栈中的位置。伪索引被用来访问注册表(参见4.3)和索引C函数的上值(参见4.2)。
可使用可接受索引来调用一个只需要传入值的函数(比如查询函数),而无需传入某个可变变量的所处位置。可接受索引可以是任何有效的索引,也可以是一个在为栈分配的空间内、在栈顶之后的任何存在的位置,即最高能索引栈大小的位置。(注意0绝对是不可接受的索引。)对于当前C函数的上值索引而言(参见4.2),哪怕这个索引的上值实际上大于上值数量,此时这个索引也是可接受的(但是无效)。除非另有说明,API中的函数使用可接受索引。
在查询栈的时候,可接受索引有助于避免对栈顶做额外的测试。例如,某个C函数可以查询其第三个参数却不用检查第三个参数是否真的存在,即无需查询索引3是否有效。
对于可以使用可接受索引调用的函数,任何无效的索引会被当做包含了虚拟类型LUA_TNONE的值来处理,其的行为和nil值类似。