LuaとC——拡張Lua(四)

1022 ワード

Luaは拡張性があるので,新しいC関数を記述することによってLuaを拡張することができる.
まずC関数を書きます.
int add(lua_State *L)
{
    int num1 = lua_tonumber(L, 1);
    int num2 = lua_tonumber(L, 2);
    int sum = num1+ num2;
    lua_pushnumber(L, sum);
    return 1;
}

再登録関数
個々の関数を登録するには、次の手順に従います.
lua_register(L, "add", add);

複数の関数の花を登録するには、lua 5.1と5.2が違う
    const luaL_Reg methods[] = 
    {
        { "add", add },
        { NULL, NULL }
    };
    
    const char* libname = "ex";
    
#if LUA_VERSION_NUM > 501
    lua_newtable(L);
    luaL_setfuncs(L, rclib, 0);
    lua_setglobal(L, libname);
#else
    const luaL_Reg metafuncs[] =
    {
        { 0, 0 }
    };
    luaL_newmetatable(L, libname);
    luaL_register(L, NULL, metafuncs);
    luaL_register(L, libname, rclib);
#endif

Luaでは、ex.add(num 1,num 2)を使用すると拡張関数を使用することができ、ライブラリテーブルでグローバルテーブルを汚染することなくlua 5に注意することができる.1で定義されています
#define luaL_reg luaL_Reg