lubridge getGlobal总是返回nil

LuaBridge getGlobal is always returning nil

本文关键字:返回 nil getGlobal lubridge      更新时间:2023-10-16

我在1周前用lubridge做了第一个小测试,它从脚本中获得了一个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: Lua API的cell中未受保护的错误(错误参数#2(预期的数字,得到nil))中止(核心转储)之前

当我试图从脚本中获得字符串或函数时,我不知道我在这方面做错了什么。

谢谢你的回答

来自luaL_loadfileex的文档:

作为lua_load,这个函数只加载数据块;它不运行它

这意味着脚本已加载,但尚未执行,因此实际上没有变量nmbr可获取。您需要首先运行脚本以使代码工作(例如通过调用lua_call)。

这在lubridge教程的第一个简单示例中展示得很好。

luaL_loadfile ~= luaL_dofile。您加载脚本并将其作为堆栈上的函数获取,但不执行它,因此全局赋值不会发生。