为什么在这个例子中lua_newlib不起作用?

我在 lua 脚本中尝试调用 c 方法 my_sin。我正在使用 lua 5.2.2 并希望测试使用 luaL_newlib 而不是 lua_register。不幸的是,lua 脚本找不到 mysin

extern "C" {
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}

#include <cmath>

static int my_sin (lua_State *L) {
  lua_pushnumber(L, sin(luaL_checknumber(L, 1)));
  return 1;
}
static const luaL_Reg my_lib[] = {
   {"mysin",   my_sin},
   {NULL, NULL}
};

int my_open(lua_State *L) {
  luaL_newlib(L, my_lib);
  return 1;
}

int main() {
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);
    my_open(L);
    luaL_dostring(L, "print(mysin(2))");
    lua_close(L);
    return 0;
}
点赞
用户107090
用户107090

luaL_newlib 函数会创建一个新的表,并从一系列函数中填充该表。你的函数 mysin 会被放在这个表中,而不是成为一个全局函数。如果你想让它成为一个全局函数,可以使用 lua_register 函数。

2013-04-28 12:27:28