C++ & Lua 在运行时注册自定义 Lua 库

我目前正在尝试将 Lua 实现到我的 CPP 程序中,但是我遇到了以下问题:我有一个在 lua 中的库,假设为 lib.lua,我希望在运行时运行它,这样其他 lua 脚本就可以访问它,但我遇到了问题,这是我的代码:

    /* 初始化 Lua */
    L = luaL_newstate();

    /* 加载 Lua 基础库 */
    luaL_openlibs(L);

    /* 将我的路径添加到 package.path */
    luaL_dostring(L, "package.path = 'D://Game.Helper/Lua/libs/?.lua;'..package.path ");

    /* 引用我的库 */
    luaL_dostring(L, "_G class = require 'middleclass'");
    ^^^ 这是当前不起作用的代码 ^^^

    /* 加载脚本 */
    luaL_loadfile(L, "d://Game.Helper/Lua/scripts/test.lua");

    lua_call(L, 0, 0);

    // 清理它
    lua_close(L);

脚本正在正确加载,但如果我不在脚本本身中引用我的库,那么它将返回一个 nil 值

非常感谢您的帮助,谢谢!

点赞
用户7509065
用户7509065

在 Lua 中,当你将一个变量声明为 local 时,它只在当前的词法作用域中可用。在一个文件中你所做的 local class = require 'middleclass' 操作,之后你试图在另一个文件中使用 class,但这个文件有它自己的作用域。你需要取消 local 这个声明,这样 class 就变成了全局变量,或将这一行代码移动到将使用 class 的文件中。

2020-12-16 06:53:11