Раздавать lua globals через файлы сценариев?
Скажем, у меня есть сценарий, как
my_global = my_cpp_class()
my_global = nil
теперь, хотя это правильно вызывает деструктор my_cpp_class, этот код не делает:
my_global = my_cpp_class()
call_script("a.lua") -- a.lua contains "my_global = nil"
-- "call_script" is actually a simplified notation
-- I create script as userdata and then I can
-- set its child scripts that should be reloaded once script is modified
То же самое, когда я просто заменяю call_script на dofile.
По сути, я хочу, чтобы конкретный файл сценария мог присваивать "ноль" существующему глобалу, чтобы старое значение стало недоступным.
Теперь мне нужно для этого перезагрузка скрипта в режиме реального времени - при изменении файла скрипта он моментально компилируется и вызывается с call_script
снова с его дочерними сценариями во время выполнения, так что это должно привести к переназначению глобальных переменных и, следовательно, к старым значениям должен быть собран мусор.
Есть ли более простой и предпочтительный способ перезагрузки скриптов?
Должен ли я использовать местных жителей или манипулировать с окружающей средой? Я использую luabind, если это актуально.
1 ответ
Если вы выполняете сценарий в том же lua_State
глобальное фактически переназначается (вы можете проверить, что переменная видна перед назначением nil
). Деструктор объекта C++ запускается, когда объект собирается, что может произойти не сразу после того, как он станет недоступным. призвание lua_gc()
из C++ или collectgarbage()
от Lua, вероятно, поможет.