Lua:在本机 lua 中编译,但在 C++ 中使用 LuaJIT 和 sol2 时出错
Lua: Compiles in native lua but error in C++ with LuaJIT and sol2
我有以下 lua 代码,运行在 an online interpreter 中没问题:
__sprite_properties = {
events = {}
}
function bind_event(event_name, fun)
table.insert(__sprite_properties.events, { event_name, fun })
print(__sprite_properties.events[1][1])
end
foo = function()
return 0
end
bind_event("foo_event", foo)
>> foo_event
但是当我尝试使用 sol2 库在 C++ 中加载和 运行 脚本时,我在 table.insert
语句中遇到以下错误:
script.lua:6: attempt to index global 'table' (a nil value)
stack traceback: script.lua:6: in function 'bind_event' --
script.lua:13: in main chunk
我正在使用 LuaJIT 作为 lua 发行版。
用于在 lua 中加载脚本的代码是以下片段:
sol::state lua;
lua.open_libraries(sol::lib::base);
try {
lua.safe_script_file("script.lua");
}
catch (const sol::error& e) {
std::cout << e.what() << std::endl;
}
为什么用c++加载这段代码不能正常执行?
您是否在 C++ 代码中加载了标准 Lua 库?您似乎只加载了基础库,而不是 table 库:
lua.open_libraries(sol::lib::base);
我有以下 lua 代码,运行在 an online interpreter 中没问题:
__sprite_properties = {
events = {}
}
function bind_event(event_name, fun)
table.insert(__sprite_properties.events, { event_name, fun })
print(__sprite_properties.events[1][1])
end
foo = function()
return 0
end
bind_event("foo_event", foo)
>> foo_event
但是当我尝试使用 sol2 库在 C++ 中加载和 运行 脚本时,我在 table.insert
语句中遇到以下错误:
script.lua:6: attempt to index global 'table' (a nil value)
stack traceback: script.lua:6: in function 'bind_event' -- script.lua:13: in main chunk
我正在使用 LuaJIT 作为 lua 发行版。 用于在 lua 中加载脚本的代码是以下片段:
sol::state lua;
lua.open_libraries(sol::lib::base);
try {
lua.safe_script_file("script.lua");
}
catch (const sol::error& e) {
std::cout << e.what() << std::endl;
}
为什么用c++加载这段代码不能正常执行?
您是否在 C++ 代码中加载了标准 Lua 库?您似乎只加载了基础库,而不是 table 库:
lua.open_libraries(sol::lib::base);