我试图"筑巢"从C.注册的两个模块我试图稍微分开一些问题。
这是我的"核心"模块。它有一个名为" setName"
的方法int l_setName(lua_State *l)
{
// do something
return 0;
}
///////////////////////////////////////////////////////////////////////////////
static luaL_Reg const core_funcs [] =
{
{ "setName", l_setName },
{ NULL, NULL }
};
///////////////////////////////////////////////////////////////////////////////
void l_registerFuncs( lua_State * L )
{
luaL_newlib(L, core_funcs);
lua_setglobal(L, "Core");
}
///////////////////////////////////////////////////////////////////////////////
从Lua,您可以说Core.setName("hello world")
这是一个复杂的子系统,有20个函数,都与同一个域有关。
int l_importantFunction(lua_State *l)
{
// do something
return 0;
}
///////////////////////////////////////////////////////////////////////////////
static luaL_Reg const subSystem_funcs [] =
{
{ "importantFunction", l_importantFunction },
{ NULL, NULL }
};
///////////////////////////////////////////////////////////////////////////////
void l_registerFuncs( lua_State * L )
{
luaL_newlib(L, subSystem_funcs);
lua_setglobal(L, "Core.Subsystem");
}
///////////////////////////////////////////////////////////////////////////////
我希望这个子系统在Core下注册。我希望能够说Core.Subsystem.importantFunction("Hi")
这样做的惯用方法是什么?
在查看人们如何注册"对象"之后,似乎是could get very complicated。
答案 0 :(得分:3)
您需要手动获取Core表,然后使用lua_setfield(或类似)在该表中创建Subsystem条目。
随后是010110110101,上述指示成为:
lua_getglobal(L, "Core");
luaL_newlib(L, subSystem_funcs);
lua_setfield(L, -2, "SubSystem");