Lua 使用元数据回调
Lua callbacks with meta data
我想在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 调用我的回调时,我总是看到值 [1],而不是值 [0]。我玩过注册回调然后添加一个表的概念,但我不确定这会让我走得更远。
至于原因:我正在尝试抽象函数名称以使我们的lua程序员更容易编写代码,但这些只需要转换为相同的参数化函数。想想它通过传递单个参数来添加更改设置,但命名方式不同。
思潮?
您可能希望将这些上下文值附加为函数的上值。 看看lua_pushcclosure()
.
结合米奇·卡威克的评论:
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" );
}
相关文章:
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- CURLOPT_INTERLEAVEFUNCTION回调函数始终接收 nullptr 作为用户数据指针
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- 将任意数据传递给不接受"void* userarg"的C++回调
- 通过回调提供数据服务
- 如何使用GLUT的回调操作数据
- 带有字符串抛出bad_alloc用户数据的 curl 写入回调
- 对用户数据进行严格的别名和回调
- Lua 使用元数据回调
- ZeroMQ是否有数据到达时的通知/回调事件/消息
- 正在从回调函数检索数据
- 如何设置正确的回调来检索数据
- 数据写入磁盘回调
- boost::asio async_read 不接收数据或使用回调
- 从回调中访问数据
- 使用自定义数据作为函数参数调用lua回调
- 数据成员"查询回调"不能是成员模板
- 在回调中传递数据
- 可视化 如何将私有数据类的成员函数作为 C++ 非托管线程的回调发送?
- 将签名来自元组解包的静态方法的地址作为回调传递