LuaBridge 的 getGlobal 函数始终返回 nil。

我在一周之前进行了第一次使用 LuaBridge 的小测试,它可以从脚本中获取一个 int。

现在我删除了这段代码,试图在我的游戏引擎中包含 Lua 脚本,但它不再工作了。 我尝试使用以下基本代码:

#include <iostream>

#include "lua5.2/lua.hpp"
#include "LuaBridge/LuaBridge.h"

using namespace luabridge;

int main()
{
    lua_State* L;
    L = luaL_newstate();

    if(!luaL_loadfile(L, "../../script.lua"))
        std::cout << "failed loading" << std::endl;

    LuaRef s = getGlobal(L, "nmbr");
    int luaInt = s.cast<int>();
    std::cout << luaInt << std::endl;

    return 0;
}

与以下脚本:

nmbr = 30

它给我返回:

PANIC: unprotected error in cell to Lua API (bad argument #2 (number expected, got nil))
Aborted (core dumped)

当我尝试从脚本中获取字符串或函数时,它也是一样的,并且我不知道我做错了什么。

感谢您的回答 :)

点赞
用户440558
用户440558

luaL_loadfileex的文档中:

lua_load 一样,这个函数只是加载了代码块,但并没有运行。

这意味着脚本已经被加载,但是并没有被执行,所以实际上并没有变量nmbr可用。您需要先运行脚本才能让代码工作(例如通过调用lua_call)。

这在LuaBridge教程的第一个简单示例中很好地说明了。

2015-08-26 10:04:55
用户2546626
用户2546626

luaL_loadfileluaL_dofile 不同。你可以将脚本加载成函数并将其放在堆栈中,但不会立即执行,因此全局赋值不会发生。

2015-08-26 10:05:07