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
ここで、最後の 2 行をコメントアウトして、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));
}
次のエラーが表示されます:ローカル 'self' (nil 値) のインデックスを作成しようとしています
私が間違っていることと、関数を期待どおりに実行する方法を誰かに教えてもらえますか?
ありがとうございました!