如何从C ++创建和推送表(带键/值对)到lua?

时间:2016-02-20 07:34:44

标签: c++ lua

我想从C ++函数返回包含lua函数的表(带键/值对)。 在lua方面,函数的返回值是table。但是,桌子是空的。

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

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

lua_newtable(L);
for(list<NativeFunction_t>::iterator it = nativeFuncs.begin(); it != nativeFuncs.end(); it++)
{
    NativeFunction_t tmp = *it;
    cout << "Loading " << tmp.Name << " to lua...";
    lua_pushstring(L, tmp.Name);
    //If I do lua_pushstring(L, (Index)) instead of above, it works.
    //lua_pushstring(L, tmp.Name);
    lua_pushcfunction(L, tmp.Func);
    lua_settable(L, -3);
    cout << "Success" << endl;
}
//lua_setglobal(L, loadAs);
cout << "Done" << endl;
return 1;

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

这是lua代码。

print("Loading NativeLoader...")
NativeLoader = require("Module")
print("Loading library...")
NativeLoader.Load("Hello", "TestLibrary")
print("Looking library...")
print("TestLibrary: " ..#TestLibrary)
for n, item in ipairs(TestLibrary) do
    print(item)
end
--t.hello()
--t.bye()

1 个答案:

答案 0 :(得分:2)

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

ipairs仅遍历从1到n的整数键。 正如siffejoe在评论中所建议的那样,您应该使用pairs代替。 但是,您应该注意pairs不按照它们在表中插入的顺序遍历元素。

如果您需要按特定顺序排列元素,则可能需要返回包含特定顺序的字符串键的附加表。或者,您可能希望将原始表格返回到包含不同表键的名称和函数的表的数组中。

另请注意,length运算符仅适用于整数键序列。 因此,对于仅使用字符串键的表,它总是返回0.

我建议你阅读lua参考手册,了解长度操作符,对和ipairs。以下是lua 5.3手册的链接: