luaL_Buffer
- typedef struct luaL_Buffer luaL_Buffer;
字符串缓存 的类型。
字符串缓存可以让 C 代码分段构造一个 Lua 字符串。使用模式如下:
- 首先定义一个类型为
luaL_Buffer
的变量b
。 - 调用
luaL_buffinit(L, &b)
初始化它。 - 然后调用
luaL_add*
这组函数向其添加字符串片断。 最后调用
luaL_pushresult(&b)
。最后这次调用会在栈顶留下最终的字符串。
如果你预先知道结果串的长度,你可以这样使用缓存:首先定义一个类型为
luaL_Buffer
的变量b
。- 然后调用
luaL_buffinitsize(L, &b, sz)
预分配sz
大小的空间。 - 接着将字符串复制入这个空间。
- 最后调用
luaL_pushresultsize(&b, sz)
,这里的sz
指已经复制到缓存内的字符串长度。
一般的操作过程中,字符串缓存会使用不定量的栈槽。因此,在使用缓存中,你不能假定目前栈顶在哪。在对缓存操作的函数调用间,你都可以使用栈,只需要保证栈平衡即可;即,在你做一次缓存操作调用时,当时的栈位置和上次调用缓存操作后的位置相同。(对于luaL_addvalue
是个唯一的例外。)在调用完luaL_pushresult
后,栈会恢复到缓存初始化时的位置上,并在顶部压入最终的字符串。