2

c API と Lua5.1 を使用してテーブルを呼び出そうとしています。

私は次の手順でそれをやっています:

  1. __callメタ関数を持つテーブル「mt」を作成します
  2. テーブル「newT」を作成し、「mt」を「newT」メタテーブルに設定します
  3. pcall「ニューT」

私の問題はステップ 3 にあります。「テーブル値を呼び出そうとしています」というエラーが表示されます。

Cでテーブルを呼び出す方法を誰か教えてもらえますか?

4

1 に答える 1

2

ルア

t = {}
setmetatable(t, { __call = function() print("calling the table") end })
pcall(t)

C と同等 (テストされていませんが、動作するはずです)

int mtcall(lua_State* L) {
    printf("calling the table\n");
    return 0;
}

int mainchunk(lua_State* L) {
    lua_newtable(L);                    // stack : t
    lua_newtable(L);                    // stack : t, mt
    lua_pushcfunction(L, &mtcall);      // stack : t, mt, &mtcall
    lua_setfield(L, -2, "__call");      // mt.__call = &mtcall || stack : t, mt
    lua_setmetatable(L, -2);            // setmetatable(t, mt) || stack : t
    if (lua_pcall(L, 1, 0) != 0)        // in case of error there will be an error string on the stack. Pop it out.
        lua_pop(L, 1);
    return 0;
}
于 2016-10-23T00:58:20.347 に答える