import{_ as e,c as a,o as t,a4 as o}from"./chunks/framework.Cy9JvDAg.js";const u=JSON.parse('{"title":"4.1.2 - 有效与可接受的索引","description":"","frontmatter":{"title":"4.1.2 - 有效与可接受的索引","footer":true,"lastUpdated":true,"outline":false},"headers":[],"relativePath":"4.1.2.md","filePath":"4.1.2.md"}'),_={name:"4.1.2.md"},r=o('<h3 id="_4-1-2-有效与可接受的索引" tabindex="-1">4.1.2 - 有效与可接受的索引 <a class="header-anchor" href="#_4-1-2-有效与可接受的索引" aria-label="Permalink to &quot;4.1.2 - 有效与可接受的索引&quot;">​</a></h3><p>API中的任何函数都只接收<em>有效索引</em>或<em>可接受索引</em>。</p><p><em>有效索引</em>指的是引用位置存储的是可更改的Lua值。它包括从1到栈顶（1 ≤ abs(index) ≤ top）的栈索引以及<em>伪索引 pseudo-indice</em>，伪索引表示一些C代码可以访问但是不在栈中的位置。伪索引被用来访问注册表（参见<a href="/lua5.4-manual-zh/4.3.html">4.3</a>）和索引C函数的上值（参见<a href="/lua5.4-manual-zh/4.2.html">4.2</a>）。</p><p>可使用<em>可接受索引</em>来调用一个只需要传入值的函数（比如查询函数），而无需传入某个可变变量的所处位置。<em>可接受索引</em>可以是任何有效的索引，也可以是一个在为栈分配的空间内、在栈顶之后的任何存在的位置，即最高能索引栈大小的位置。（注意0绝对是不可接受的索引。）对于当前C函数的上值索引而言（参见<a href="/lua5.4-manual-zh/4.2.html">4.2</a>），哪怕这个索引的上值实际上大于上值数量，此时这个索引也是可接受的（但是无效）。除非另有说明，API中的函数使用可接受索引。</p><p>在查询栈的时候，可接受索引有助于避免对栈顶做额外的测试。例如，某个C函数可以查询其第三个参数却不用检查第三个参数是否真的存在，即无需查询索引3是否有效。</p><p>对于可以使用可接受索引调用的函数，任何无效的索引会被当做包含了虚拟类型LUA_TNONE的值来处理，其的行为和<strong>nil</strong>值类似。</p>',6),n=[r];function s(m,l,p,i,c,d){return t(),a("div",null,n)}const f=e(_,[["render",s]]);export{u as __pageData,f as default};
