C语言 如何将表推送到Lua堆栈上

x0fgdtte  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(123)

请解释一下,我需要在C语言的Lua栈中放置一个类似的表:

table_ = 
{
    param_1 = "Y1234",
    param_2 = "XXX",
    param_3 = "M"
}

我找到了“lua_createtable”函数:
https://www.lua.org/manual/5.3...一个新表格

void lua_createtable (lua_State *L, int narr, int nrec);

创建一个新的空表并将其压入堆栈。参数narr是一个提示,提示表将有多少元素作为一个序列;参数nrec是一个关于表将有多少OTHER元素的提示。Lua可以使用这些提示为新表预分配内存。当您提前知道表将有多少元素时,此预分配对性能非常有用。否则,您可以使用函数lua_newtable。
我不明白-参数narr和nrec。
narr -表中有多少个元素将作为一个序列。什么是“作为序列”?序列是什么?
nrec -是一个关于表中有多少其他元素的提示。其他元素是什么意思?什么其他元素?
而且不清楚的是,在我创建了一个空表并在堆栈上标记了它之后,我如何才能用“键-值”值填充这个表呢?

rqqzpn5f

rqqzpn5f1#

来自同一手册:
只有一个边框的表称为序列。例如,表{10,20,30,40,50}就是序列,因为它只有一个边框(5)表格{10,20,30,nil,50}有两个边界(3和5),因此它不是一个序列。表{nil,20,30,nil,nil,60,nil}有三个边界(0、3和6),所以它也不是序列。表{}是边界为0的序列。请注意,非自然键不会影响表是否为序列。
至于填充该表,您可以使用lua_setfield(手动),因此可以执行以下操作:

lua_createtable(L, 0, 2);

lua_pushinteger(L, some_number_value);
lua_setfield(L, -2, "field_1");

lua_pushstring(L, some_string_value);
lua_setfield(L, -2, "field_2");

相关问题