【问题标题】:LuaBridge getGlobal is always returning nilLuaBridge getGlobal 总是返回 nil
【发布时间】:2015-11-20 07:10:11
【问题描述】:

我在 1 周前使用 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:单元格到 Lua API 的未受保护错误(错误参数 #2(预期数字,得到 nil)) 中止(核心转储)

当我尝试从脚本中获取字符串或函数时也是如此,但我不知道我在这方面做错了什么。

感谢您的回答:)

【问题讨论】:

    标签: c++ lua luabridge


    【解决方案1】:

    来自luaL_loadfileex的文档:

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

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

    这在第一个简单示例in this LuaBridge tutorial 中得到了很好的展示。

    【讨论】:

    • 是的,我阅读了本教程(这就是它最初起作用的原因,因为我几乎复制粘贴了它)。但是我对dofile和loadfile之间的区别理解很差。现在有了你和@Youka 的回答,我理解了这个问题以及变量赋值的必要性。非常感谢:)
    【解决方案2】:

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

    【讨论】:

    • 好的,我知道它是不同的,但我只是认为不同之处在于在 dofile 中它会调用脚本中存在的函数。我不知道变量赋值需要它。谢谢:)
    猜你喜欢
    • 2017-03-28
    • 2015-03-05
    • 2014-08-25
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多