【问题标题】:Call Lua table function from C++ w/ self in function从 C++ 调用 Lua 表函数 w/ self in function
【发布时间】:2017-03-25 21:36:17
【问题描述】:

我的目标是简单地从 C++ 调用一个表函数,该函数在函数内部使用“self”来访问该表的字段和函数。我一直在有'self.name'的行上得到可爱的'试图调用一个零值(本地自我)'。下面是我的 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 中看到“In OnUpdate in Lua”,但从来没有看到“Foo”。如果我检查来自 'lua_pcall' 的错误,我会收到上面提到的错误消息。在调用“lua_pcall”之前我是否缺少某个 Lua C API 函数?我知道'。 vs. ':' 在 lua 中使用 'self'。如果我在 Lua 脚本中添加一个调用,例如 'Foo:Update()',一切都会完美运行。这让我很困惑。

【问题讨论】:

    标签: c++ lua


    【解决方案1】:

    您需要将Foo 的值作为第一个参数发送。所以,做吧

    lua_pushvalue(L, -2);
    lua_pcall(L, 1, 0, 0);
    

    【讨论】:

    • 漂亮!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 2013-02-19
    • 2015-12-30
    • 2022-01-04
    • 2015-06-15
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多