В настоящее время я пытаюсь внедрить LUA в свою программу CPP, однако у меня возникла следующая проблема: у меня есть библиотека на lua, скажем, lib.lua, которую я хотел бы запустить во время выполнения, чтобы другие сценарии lua могли получить к ней доступ. У меня проблемы с этим, вот мой код:
/* initialize Lua */
L = luaL_newstate();
/* load Lua base libraries */
luaL_openlibs(L);
/* add my path to package.path */
luaL_dostring(L, "package.path = 'D://Game.Helper/Lua/libs/?.lua;'..package.path ");
/* require my the library */
luaL_dostring(L, "_G class = require 'middleclass'");
^^^ THIS IS CURRENTLY THE CODE NOT WORKING ^^^
/* load the script */
luaL_loadfile(L, "d://Game.Helper/Lua/scripts/test.lua");
lua_call(L, 0, 0);
// clean it up
lua_close(L);
скрипт загружается правильно, однако, если мне не нужна моя библиотека в самом скрипте, он вернет для нее нулевое значение
Любая помощь приветствуется, спасибо!
В Lua, когда вы объявляете переменную как local
, она доступна только в этой лексической области видимости. Вы сделали local class = require 'middleclass'
в одном файле, а затем попытались использовать class
в другом файле, у которого есть своя область действия. Вам нужно либо избавиться от local
, чтобы вместо этого class
была глобальной переменной, либо переместить эту строку в файл, который будет использовать class
.
@CheekyLewb Вы имели в виду _G.class
вместо _G class
?
Вы гений, спасибо! это исправило мою проблему!
Понял, спасибо за ответ, я удалил loader.lua и смог отредактировать путь к пакету, используя: luaL_dostring(L, "package.path = 'D://Game.Helper/Lua/libs/?.lua;' ..package.path "); Это позволяет мне идеально использовать мою библиотеку локально в моих сценариях, как бы я ни пытался это сделать: luaL_dostring(L, "_G class = require 'middleclass'"); перед загрузкой моего скрипта, и они не распознают средний класс, если я не объявлю его локально с помощью require , есть ли для этого причина?