luaL_Buffer

  1. 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 后,栈会恢复到缓存初始化时的位置上,并在顶部压入最终的字符串。