我正在尝试通过 C API 在 Lua 中执行一些 OO 功能。在我的 Lua 脚本中,我有以下内容:
Parser = {}
Parser.__index = Parser
function Parser:create(url)
local self = {}
print ("creating")
self.baseUrl = url
setmetatable(self, Parser)
return self
end
function Parser:Foo()
print ("baseUrl: " .. self.baseUrl)
end
p = Parser:create("http://www.google.com")
p:Foo()
如果我从命令行运行它,它工作正常,我看到以下输出:
creating
baseUrl: http://www.google.com
现在,如果我注释掉最后两行并通过 C API 尝试以下操作
// <load the state and lua file>
lua_getglobal(L, "Parser");
lua_getfield(L, -1, "create");
lua_pushstring(L, "http://www.google.com");
if (lua_pcall(L, 1, 1, 0) != 0)
{
// handle error
}
这行得通。我按预期在标准输出中看到“创建”。据我了解,新的Parser对象现在位于堆栈顶部。如果我他们立即尝试以下操作:
lua_getfield(L, -1, "Foo");
if (lua_pcall(L, 0, 0, 0) != 0)
{
logger()->error("-- %1", lua_tostring(L, -1));
}
我收到以下错误:尝试索引本地“自我”(零值)
谁能告诉我我做错了什么以及如何让函数按预期运行?
谢谢!