Lua回调函数与元数据

我想为脚本工作者在 Lua 中设置一些函数,但当这些函数被调用时,我希望它们实际上会调用一个由我定义的带参数的单个函数。可能会像这样:

Lua:

foo1()
foo2()

C++:

int myFunction(lua_State *context)
{
    int numArgs = lua_gettop(context);
    int topOfStack = -3;
    bool lightUserDataFlag = lua_islightuserdata(context,topOfStack);

    if(lightUserDataFlag)
    {
    }
}

所以我有点困惑。我正在尝试注册带参数的回调。到目前为止,我有一些东西没有保存函数注册的参数;似乎只保存我添加的最后一个参数。

void setupCallback()
{
    lua_register(context,“foo1”,Callback);
    lua_pushlightuserdata(context,&value [0]);
    lua_register(context,“foo2”,Callback);
    lua_pushlightuserdata(context,&value [1]);
}

当 Lua 调用我的回调时,我总是看到 value[1] 的值,从未看到 value[0] 的值。我曾考虑过注册回调,然后添加一个表,但我不确定这会让我走得更远。

至于原因:我正在尝试抽象函数名称,以使撰写我们的 Lua 程序员代码更容易,但这些函数只需要转换为同一带参数的函数。想象一下通过传递单个参数来更改设置,但通过不同的名称来命名。

有什么想法吗?

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

点赞
stackoverflow用户161144
stackoverflow用户161144

你可能希望将这些上下文值作为函数的 upvalue 附加。请参阅 lua_pushcclosure()

整合 Mickey Kawick 的评论:

int Callback (lua_State *context)
{
    int val= lua_tointeger( context, lua_upvalueindex(1) );
    cout << val << endl;
    ...
}

void setup()
{
    lua_pushnumber( context, 3 );
    lua_pushcclosure( context, Callback, 1 );
    lua_setglobal( context, "foo1" );

    lua_pushnumber( context, 42 );
    lua_pushcclosure( context, Callback, 1 );
    lua_setglobal( context, "foo2" );
}
2012-05-12 19:20:54