跨脚本文件共享lua全局?

时间:2013-09-29 13:43:56

标签: c++ lua luabind

说我有一个类似

的脚本
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时也一样。

基本上,我希望特定的脚本文件能够将“nil”分配给现有的全局,以便旧值变为无法访问

现在我需要的是实时脚本重新加载 - 每当脚本文件被修改时,它立即被编译并在运行时使用其子脚本再次使用call_script进行调用,因此它应该导致全局重新分配因此旧的价值应该是垃圾收集。

是否有更简单,更首选的方式来执行此类脚本重新加载?

我应该以某种方式使用本地人,还是在环境中操纵? 我使用luabind,如果它是相关的。

1 个答案:

答案 0 :(得分:2)

如果您在同一lua_State内执行脚本,则实际全局被重新分配(您可以在分配nil之前检查该变量是否可见)。收集对象时会运行C ++对象的析构函数,这可能不会在无法访问后立即发生。从C ++调用lua_gc()或从Lua调用collectgarbage()可能会有所帮助。