首页 > 解决方案 > Lua 的“全局”本地值存储在哪里?

问题描述

我需要从 C 中调用 Lua 函数,只要该函数是全局的,我就可以在全局表中找到它,但如果它被声明为本地,我如何将地址压入堆栈以调用它?

function MyGlobal()
  print("Global")
end

local function MyLocalGlobal()
  print("Local")
end

从 C调用MyGlobal()不是问题,它工作正常。我在全局表中查找函数。

但是我如何MyLocalGlobal()从 C 调用?它不在全局表中,但它在哪里以及如何推送地址?

我正在使用 Lua 5.3.4。

标签: cluafunction-calllocal-functionsglobal-functions

解决方案


MyLocalGlobal()功能不是真正的全球性的。它对于代表整个加载代码块的匿名函数是本地的。

当你打电话时真正发生了什么lua_load/lua_loadstring

return function(...) -- implicit functionality outside of code to be loaded

    -- your file starts here --
    function MyGlobal()
      print("Global")
    end

    local function MyLocalGlobal()
      print("Local")
    end
    -- file ends here --

end               -- implicit functionality outside of code to be loaded

您可以MyLocalGlobal稍后使用调试工具(通过“调试”库),或者您应该在该源文件的末尾显式返回所需的接口,并在加载/执行后立即在本机端获取/读取接口块。


推荐阅读