LuaBridge getGlobal 总是返回 nil
LuaBridge getGlobal is always returning nil
一周前我用 LuaBridge 做了第一次小测试,它成功地从脚本中获取了一个整数。
现在我删除了这段代码并尝试在我的游戏引擎中包含 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)
当我试图从脚本中获取字符串或函数时也是如此,但我不知道我在这方面做错了什么。
感谢您的回答:)
来自 luaL_loadfileex
的文档:
As lua_load, this function only loads the chunk; it does not run it.
这意味着脚本已加载,但尚未执行,因此实际上没有变量 nmbr
可获取。您需要先 运行 脚本才能使代码正常工作(例如调用 lua_call
)。
这在第一个简单示例中表现得很好in this LuaBridge tutorial。
luaL_loadfile
~=luaL_dofile
。您加载脚本并将其作为堆栈上的函数获取但不执行它,因此不会发生全局分配。
一周前我用 LuaBridge 做了第一次小测试,它成功地从脚本中获取了一个整数。
现在我删除了这段代码并尝试在我的游戏引擎中包含 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)
当我试图从脚本中获取字符串或函数时也是如此,但我不知道我在这方面做错了什么。
感谢您的回答:)
来自 luaL_loadfileex
的文档:
As lua_load, this function only loads the chunk; it does not run it.
这意味着脚本已加载,但尚未执行,因此实际上没有变量 nmbr
可获取。您需要先 运行 脚本才能使代码正常工作(例如调用 lua_call
)。
这在第一个简单示例中表现得很好in this LuaBridge tutorial。
luaL_loadfile
~=luaL_dofile
。您加载脚本并将其作为堆栈上的函数获取但不执行它,因此不会发生全局分配。