【问题标题】:How do you properly load files within a script with luabind?如何使用 luabind 在脚本中正确加载文件?
【发布时间】:2013-02-02 08:28:39
【问题描述】:

我正在尝试将 Lua 嵌入到游戏中。我想要做的是创建一个加载函数,它将加载文件夹中的所有文件,然后根据将存储在 C++ 端的文件创建对象。但是,如果我使用 dofile 之类的东西,它会用该文件中的变量污染所有内容。如何将此导入更改为本地导入?

【问题讨论】:

    标签: c++ lua luabind


    【解决方案1】:

    你可以使用loadfile根据文件内容获取函数,然后setfenv(fn,{})设置环境,然后调用该函数(可能包装成pcall):

    local fn, err = loadfile("myfile")
    if fn then
      setfenv(fn,{})
      local ok, err = pcall(fn)
      if not ok then error(err) end
    else
      error(err)
    end
    

    您还可以使用脚本访问或提供对全局环境的访问所需的值填充传递给setfenv 的表,例如:

    local env = {}
    setmetatable(env,{__index = _G})
    setfenv(fn,env)
    

    这就是 Lua 5.1 的全部内容。

    【讨论】:

    • 这是很好的 Lua 代码,但我猜他想要 C++ 等效代码。
    • 非常感谢,这正是我所需要的。
    猜你喜欢
    • 2020-09-29
    • 2021-12-22
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2018-02-06
    相关资源
    最近更新 更多