luaで定義された関数を使用してAgentクラスを作成したいと思います。したがって、次のようなluaファイルがある場合soldier.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 funcion 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 );
何か案は?