我正在尝试使用c API和Lua5.1调用表。
我是通过以下步骤来完成的:
__call
元函数pcall
“newT”我的问题是在第3步,我收到错误:“尝试调用表值”
有谁能告诉我如何在c中调用表?
答案 0 :(得分:2)
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;
}