我的目标是简单地从C ++调用一个表函数,该函数使用函数内部的“self”来访问该表的字段和函数。我继续在'self.name'这一行上获得可爱的'尝试称为nill值(本地自我)'。下面是我的Lua脚本。
Foo = { name = 'Foo' }
function Foo:OnUpdate()
print('In OnUpdate in Lua')
print(self.name)
end
下面是我的C ++代码(暂时忽略任何错误处理)。
lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "foo.lua");
lua_getglobal(L, "Foo");
lua_getfield(L, -1, "OnUpdate");
lua_pcall(L, 0, 0, 0);
当调用'lua_pcall'时,我在CLI中看到'在Lua中的OnUpdate',但从不'Foo'。如果我从'lua_pcall'检查错误,我会收到上面提到的错误消息。在调用'lua_pcall'之前,我是否缺少某个Lua C API函数?我知道'。'与lua中的':'相比,利用'自我'。如果我在Lua脚本中添加一个调用,如'Foo:Update()',一切都很完美。这让我很难过。
答案 0 :(得分:1)
您需要将Foo
的值作为第一个参数发送。所以,做
lua_pushvalue(L, -2);
lua_pcall(L, 1, 0, 0);