c API と Lua5.1 を使用してテーブルを呼び出そうとしています。
私は次の手順でそれをやっています:
__call
メタ関数を持つテーブル「mt」を作成します- テーブル「newT」を作成し、「mt」を「newT」メタテーブルに設定します
pcall
「ニューT」
私の問題はステップ 3 にあります。「テーブル値を呼び出そうとしています」というエラーが表示されます。
Cでテーブルを呼び出す方法を誰か教えてもらえますか?
t = {}
setmetatable(t, { __call = function() print("calling the table") end })
pcall(t)
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;
}