0
我想在lua中創建一個具有已定義函數的代理類。所以,如果我有soldier.lua
像一個Lua文件:從C代碼在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代碼,我可以加載它,創建的代理表所示:
// 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 funcion Agent:test。但我無法得到它的工作。
E.g:
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);
任何想法?
「但是,我可以得到它的工作」那麼,有什麼問題呢? :) – 2013-02-21 13:01:48
@BartekBanachewicz傻了我,修正:)。問題和答案 – Zhen 2013-02-21 16:03:43