3

プロパティを lua ライブラリに公開する方法を知りたいです。

luaL_openlib( L, kName, kVTable, 1 ); // leave "library" on top of stack

これにより、kVTable が luaL_Reg を参照するため、関数のみを公開できます。

typedef struct luaL_Reg {
  const char *name;
  lua_CFunction func;
} luaL_Reg;

例: 上記のコードで。私は次のことができます。

local myLib = require "plugin.myLib"
myLib.newFunc();

ただし、Lua テーブルを CONSTANTS 変数としてライブラリに公開したいと考えています。

myLib.CONSTANTS.SOME_CONST_1
myLib.CONSTANTS.SOME_CONST_2

など。ライブラリから lua テーブルをプロパティとして公開する方法を教えてください。

4

3 に答える 3

0

C++ を使用する場合は、ヘッダーのみのluabridgeなどのバインディング ライブラリを使用して、Lua の名前付きテーブルに一部のデータをバインドできます。例を LuaBridge に変換し、Lua の状態を初期化した後にこの関数を呼び出します。

void register_constants (lua_State* L) {

    luabridge::getGlobalNamespace(L)
        .beginNamespace("myLib")
            .beginNamespace("CONSTANTS")
                .addVariable("SOME_CONST_1",&some_const_1,false/*read-only*/)
                .addVariable("SOME_CONST_2",&some_const_2,false/*read-only*/)
            .endNamespace()
        .endNamespace()
    ;
}

...

lua_State* L=lua_open();
register_constants(L);
...

最後のコード スニペットとして定数にアクセスできます

于 2013-09-25T13:54:53.310 に答える
0

Lua C API は C API であるため、注意してください。

C を使用して関数を渡すのがはるかに難しいため、友達との全体的な負担がloadlibありました (C 関数はファーストクラスの値ではありません)。したがって、私の最善の策は、通常のスタック API を使用してこれらすべての定数を設定することです。

もちろん、一般的にはランタイムデータを交換するために使用されることになっていますが、モジュールをロードするときにそれでテーブルを埋めることができない固有の理由はありません。

于 2013-09-25T13:55:31.713 に答える