Lua 创建具有 upvalues C 的函数

use*_*917 2 c lua

我正在尝试创建一个从 lua 检查时具有 2 个上值的函数。debug.getinfo(fvalues).nups 应该是 2 。

static int fvalues (lua_State *L) {
    int n = lua_gettop(L);
    if (str.size() == 0) {
        str = "This_is_a_test";
    }
    const char *cstr = str.c_str();
    lua_pushstring(L, cstr);
    lua_pushcclosure(L, &fvalues, 1);
    lua_pushstring(L, cstr);
    lua_pushcclosure(L, &fvalues, 2);
    lua_pushstring(L, cstr);
    return 1; 
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,pushclosure 不应该创造升值,我不太明白这应该如何工作。

use*_*367 5

不是很清楚你要做什么。如果你想fvalues用 2 个上值推送 C 闭包,那么:

int
main(int argc, char *argv[])
{
    ...
    lua_pushstring(L, "Hello, World!");
    lua_pushnumber(L, 3.14);
    lua_pushcclosure(L, fvalues, 2);
    lua_setglobal(L, "fvalues");
    ...
}

static int
fvalues(lua_State *L)
{
    printf("%s\n", lua_tostring(L, lua_upvalueindex(1)); // Hello, World!
    printf("%g\n", lua_tonumber(L, lua_upvalueindex(2)); // 3.14
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

闭包是通过将lua_CFunction堆栈顶部的值传递给 来创建的lua_pushcclosure。该函数的主体与上值的创建无关,它只能通过lua_upvalueindex(n).