C++ Lua 嵌入,将表推送到一个函数中作为参数

所以我试图将一个表推送到一个函数的参数中

*lua

function test1(varlist)
print(varlist[1])
print(varlist[2])
print(varlist[3])
end

addHook("string", "string2", test1)

*cpp

static int lua_addHook(lua_State* L) {
    if (lua_isstring(L, 1) && lua_isstring(L, 2) && lua_isfunction(L, 3)) {
        lua_newtable(L);

        lua_newtable(L);
        for (size_t i = 0; i < 3; ++i) {
            lua_pushinteger(L, i + 1);
            lua_pushstring(L, string("字符串 varlist: " + to_string(i)).c_str());
            lua_settable(L, -3);
        }
        if (lua_pcall(L, 1, 0, 0) != 0) {
            printf("错误:%s\n", lua_tostring(L, -1));
            lua_pop(L, 1);
        }
    }
    return 1;
}

所以它应该输出

字符串 varlist: 0

字符串 varlist: 1

字符串 varlist: 2

但我一直得到错误“尝试调用表值”

你知道问题出在哪里吗?

原文链接 https://stackoverflow.com/questions/69676931

点赞
stackoverflow用户1548468
stackoverflow用户1548468

lua_pcall 点时,堆栈看起来像这样:

table (由上面的循环构造)#堆栈顶部和函数调用的arg1
table (空)#解释为要调用的函数
function test1
string "string1"
string "string"

如果去掉其中一个 lua_newtable 调用,则可以修复它。

2021-10-22 12:42:27