2014-05-23 53 views
2

我試圖「嵌套」從C註冊的兩個模塊。我試圖區分這些問題。如何在從Lua中的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

您需要手動取'Core'表,然後使用'lua_setfield'(或類似)來創建該表中的'Subsystem'條目。 –

+1

工作正常!謝謝!這是三行代碼。當SO讓我或你先做時,我會發布它。 \t lua_getglobal(L,「Core」); \t luaL_newlib(L,subSystem_funcs); \t lua_setfield(L,-2,「SubSystem」); – 010110110101

回答

3

您需要手動獲取Core表,然後使用lua_setfield(或類似的)在該表中創建Subsystem條目。

由於隨後010110110101上述方向變成了:

lua_getglobal(L, "Core"); 
luaL_newlib(L, subSystem_funcs); 
lua_setfield(L, -2, "SubSystem");