Lua中的“全局”局部值存储在哪里?

我需要从C调用Lua函数。只要函数是全局的,我就可以在全局表中找到它,但是如果它是局部的,我应该如何将地址推送到堆栈上调用它?

function MyGlobal()
  print("Global")
end

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

从C调用MyGlobal()不是个问题,它能很好地工作。我在全局表中查找函数。

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

我使用的是Lua 5.3.4。

点赞
用户5675002
用户5675002

MyLocalGlobal() 函数并不是真正的全局函数。它是匿名函数的局部函数,该匿名函数代表了整个加载代码块。

当您调用 lua_load / lua_loadstring 时,实际发生的事情是:

return function(...) -- 隐式功能超出要加载的代码

    -- 您的文件从这里开始--
    function MyGlobal()
      print("Global")
    end

    local function MyLocalGlobal()
      print("Local")
    end
    -- 文件在这里结束--

end               -- 隐式功能超出要加载的代码

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

2018-06-29 06:55:14