Lua c API - 为新lib添加号码

时间:2017-10-01 21:35:27

标签: lua lua-api

(Lua 5.2)

我正在编写从ncurses到Lua的绑定,我希望包含除函数之外的一些值。我目前正在绑定这样的函数:

lib = require("libexample");

这会生成一个包含几个函数的表(在本例中只有一个)和一个全局字符串值,但我想在库中放入一个数字值。例如,现在,example将返回一个包含一个函数exampleNumber的表,但我希望它还有一个数字activate serpent。我该如何做到这一点?

谢谢

1 个答案:

答案 0 :(得分:1)

只需在模块表中输入一个数字。

#include <lua.h>
#include <lauxlib.h>

static char const VERSION[] = "0.1.0";

// Method implementation
static int example(lua_State* L){
    return 0;
}

// Register library using this array
static const luaL_Reg examplelib[] = {
    {"example", example},
    {NULL, NULL}
};

// Piece it all together
LUAMOD_API int luaopen_libexample(lua_State* L){
    luaL_newlib(L, examplelib);

    // Set a number in the module table
    lua_pushnumber(L, 1729);
    lua_setfield(L, -2, "exampleNumber");

    // Set global version string
    lua_pushstring(L, VERSION);
    lua_setglobal(L, "_EXAMPLE_VERSION");

    return 1;
}

然后用

编译
gcc -I/usr/include/lua5.2 -shared -fPIC -o libexample.so test.c -llua5.2

并像

一样使用它
local ex = require"libexample"
print(ex.exampleNumber)