Luaは、私が使用しているバージョン5.2用の無料のreference manualと、バージョン5.0用のProgramming in Luaも用意されています。Lua 5.2の埋め込みとライブラリの定義
しかし、私はこれらのバージョン間でいくつかの変更がありましたが、私はそれを上回ることはできないようです。この変更は、5.2および5.1のリファレンスマニュアルの逐次バージョンに記載されています。 luaL_openlib()
の引き続く非推奨がluaL_register()
を支持し、次にluaL_register()
がluaL_setfuncs()
を支持することに注意してください。
ウェブ上の検索結果が混在していて、ほとんどがluaL_register()
を指しています。発言してコンパイルとリンクさせることができる私は何を達成しようとするその下のミニプログラムによって要約することができる
、gcc ./main.c -llua -ldl -lm -o lua_test
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include <stdio.h>
#include <string.h>
static int test_fun_1(lua_State * L)
{
printf("t1 function fired\n");
return 0;
}
int main (void)
{
char buff[256];
lua_State * L;
int error;
printf("Test starts.\n\n");
L = luaL_newstate();
luaL_openlibs(L);
lua_register(L, "t1", test_fun_1);
while (fgets(buff, sizeof(buff), stdin) != NULL)
{
if (strcmp(buff, "q\n") == 0)
{
break;
}
error = luaL_loadbuffer(L, buff, strlen(buff), "line") ||
lua_pcall(L, 0, 0, 0);
if (error)
{
printf("Test error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
}
}
lua_close(L);
printf("\n\nTest ended.\n");
return 0;
}
これは期待どおりに動作してt1()
を入力すると予想される結果が得られます。
私は今、Luaに見えるライブラリ/パッケージを作成したいと思います。 Programming in Lua アドバイス私たちto useアレイと負荷機能:
はstatic int test_fun_2(lua_State * L)
{
printf("t2 function fired\n");
return 0;
}
static const struct luaL_Reg tlib_funcs [] =
{
{ "t2", test_fun_2 },
{ NULL, NULL } /* sentinel */
};
int luaopen_tlib (lua_State * L)
{
luaL_openlib(L, "tlib", tlib_funcs, 0);
return 1;
}
その後、luaL_openlibs()
後luaopen_tlib()
を使用しています。これにより、LUA_COMPAT_MODULE
(互換モードで動作する)を定義した場合、tlib:t2()
を使用することができます。
Lua 5.2でこれを行う正しい方法は何ですか?
luaL_openlibsはオプションであり、存在しないはずです(例)。 – Cubic
重要な行だけが表示されるように例を編集しました。 – prapin