Lua的“全局”本地值存储在哪里?

时间:2018-06-29 06:20:02

标签: c lua function-call local-functions global-functions

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

function MyGlobal()
  print("Global")
end

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

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

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

我正在使用Lua 5.3.4。

1 个答案:

答案 0 :(得分:2)

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

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