我想在 lua 中创建一个具有定义函数的代理类。所以,如果我有一个soldier.lua
像这样的 lua 文件:
function Agent:init()
io.write("Agent init\n")
if self then
self.x = 4
self:test()
end
end
function Agent:test()
io.write("Agent test\n")
end
从 C 代码中,我可以加载它,创建 Agent 表,如:
// create Agent class on Lua
lua_newtable( L );
lua_setfield(L, LUA_GLOBALSINDEX, "Agent");
// execute class file
auto ret = luaL_dofile( L, filename.c_str() );
现在我想self
从 C 创建一个假对象来调用Agent:init
,并且 a) self.x 行调用一个 C 函数来注册数据。并且 self.test() 行正确调用了 lua 函数 Agent:test。但我无法让它工作。
例如:
lua_getfield( L, LUA_GLOBALSINDEX, "Agent" );
lua_getfield( L, -1, "init");
lua_newtable( L );
lua_getfield( L, LUA_GLOBALSINDEX, "Agent" );
lua_setmetatable( L, -2 );
lua_getfield( L, LUA_GLOBALSINDEX, "Agent" );
lua_getmetatable( L, -1 );
lua_pushcfunction( L, testnewindex );
lua_setfield( L, -2, "__newindex" );
ret = lua_pcall( L, 1, 0, 0 );
有任何想法吗?