У меня есть следующий код Lua, который прекрасно работает в онлайн переводчик:
__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
Но когда я пытаюсь загрузить и запустить скрипт в C ++ с использованием библиотеки sol2, я получаю следующую ошибку на table.insert
заявление:
script.lua: 6: попытка индексировать глобальную «таблицу» (нулевое значение)
трассировка стека: script.lua: 6: в функции ‘bind_event’ —
script.lua: 13: в основной части
Я использую 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 ++?
Вы загрузили стандартные библиотеки Lua в свой код C ++? Кажется, вы загрузили только базовую библиотеку, а не библиотеку таблиц:
lua.open_libraries(sol::lib::base);
Других решений пока нет …