1

说我有一个脚本

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。

4

1 回答 1

2

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

于 2013-09-29T14:44:19.773 回答