如何从C++中创建并将带键/值对的表推送到lua?

我想从C++函数返回包含函数的键/值对的表格到lua。 在lua端,函数的返回值是一个表,但是表是空的。

我尝试使用字符串而不是函数,但它也不起作用。

如果我使用索引而不是键,它可以工作。但我想放一个键,而不是一个索引。

lua_newtable(L);
for(list<NativeFunction_t>::iterator it = nativeFuncs.begin(); it != nativeFuncs.end(); it++)
{
    NativeFunction_t tmp = *it;
    cout << "正在加载 " << tmp.Name << " 到lua...";
    lua_pushstring(L, tmp.Name);
    //如果我使用lua_pushstring(L,(Index))而不是上面的话,它能够工作。
    //lua_pushstring(L, tmp.Name);
    lua_pushcfunction(L, tmp.Func);
    lua_settable(L, -3);
    cout << "成功" << endl;
}
//lua_setglobal(L, loadAs);
cout << "完成" << endl;
return 1;

我创建和返回表的方式有问题吗?

这里是lua代码。

print("正在加载NativeLoader...")
NativeLoader = require("Module")
print("正在加载库...")
NativeLoader.Load("Hello","TestLibrary")
print("查找库...")
print("TestLibrary: " ..#TestLibrary)
for n, item in ipairs(TestLibrary) do
    print(item)
end
--t.hello()
--t.bye()
点赞
用户3586583
用户3586583

看起来你正在表格中使用字符串键。

ipairs 只遍历从 1 到 n 的整数键。正如评论中所建议的,你应该使用 pairs。但是,你应该注意,pairs 不会按照它们被插入到表格中的顺序遍历元素。

如果你需要元素按照特定顺序,请返回一个额外的表格,其中包含按特定顺序排列的字符串键。或者,你可能想将你返回的原始表格制作成包含不同表格键处的名称和功能的数组。

还要注意,长度运算符仅适用于整数键序列。因此,对于只使用字符串键的表,它始终会返回 0。

我建议你阅读一下 Lua 参考手册,了解长度运算符、pairs 和 ipairs。以下是 Lua 5.3 手册的链接:

2016-02-20 13:17:18